QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#578973 | #7904. Rainbow Subarray | ccsurzw | WA | 1550ms | 6724kb | C++20 | 1.5kb | 2024-09-21 00:07:55 | 2024-09-21 00:07:55 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl "\n"
const int mod = 1e9 + 7;
const int N = 1e6+ 5;
const int inf = 0x3f3f3f3f;
ll n, k;
ll a[N];
bool check(int x) {
multiset<ll> s1, s2;
ll sum = 1e18, l = 0, r = 0;
for (int i = 1; i < x; i++) {
s2.insert(a[i]);
r += a[i];
}
for (int i = x; i <= n; i++) {
if (s1.size() && a[i] < *s1.rbegin()) {
s1.insert(a[i]); l += a[i];
s2.insert(*s1.rbegin()); r += *s1.rbegin();
l -= *s1.rbegin();s1.erase(*s1.rbegin());
}
else {
s2.insert(a[i]);
r += a[i];
}
while (s1.size() < s2.size() + 1) {
auto it = *s2.begin();
l += it; s1.insert(it);
r -= it; s2.erase(it);
}
ll d = *s1.rbegin();
ll cnt = r - s2.size() * d + d * s1.size() - l;
sum = min(sum,cnt);
if (a[i - x + 1] > d) {
s2.erase(a[i - x + 1]);
r -= a[i - x + 1];
}
else {
s1.erase(a[i - x + 1]);
l -= a[i - x + 1];
}
}
if(sum <= k)
return 1;
return 0;
}
void solve() {
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i];
a[i] -= i;
}
/*for(int i = 1; i <= n; i ++)
cout << a[i] << ' ';
cout << endl;*/
int l = 1, r = n ,answer = 1;
while (l <= r) {
int mid = l + r >> 1;
if (check(mid)) {
l = mid + 1;
answer = mid;
}
else r = mid - 1;
}
cout << answer << endl;
}
signed main() {
int T = 1;
cin >> T;
while (T--)
solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3800kb
input:
5 7 5 7 2 5 5 4 11 7 6 0 100 3 4 5 99 100 5 6 1 1 1 1 1 5 50 100 200 300 400 500 1 100 3
output:
4 3 5 1 1
result:
ok 5 lines
Test #2:
score: -100
Wrong Answer
time: 1550ms
memory: 6724kb
input:
11102 2 167959139 336470888 134074578 5 642802746 273386884 79721198 396628655 3722503 471207868 6 202647942 268792718 46761498 443917727 16843338 125908043 191952768 2 717268783 150414369 193319712 6 519096230 356168102 262263554 174936674 407246545 274667941 279198849 9 527268921 421436316 3613460...
output:
1 4 3 2 6 5 7 2 4 1 4 1 1 3 2 2 7 8 7 7 1 7 6 2 4 3 1 6 7 7 3 4 3 9 3 8 6 6 3 1 6 3 1 2 4 6 4 6 4 1 4 7 1 6 3 5 6 6 1 7 5 3 1 6 4 5 3 2 2 6 2 3 10 1 4 3 2 4 5 1 7 5 5 5 8 5 3 6 3 5 5 8 5 4 5 2 1 5 2 3 3 4 8 1 3 1 2 2 8 3 1 6 8 1 8 4 5 6 6 8 4 8 3 2 8 4 5 6 2 6 2 4 1 5 4 5 3 2 4 1 2 1 4 5 8 3 7 3 3 3...
result:
wrong answer 11002nd lines differ - expected: '517', found: '515'