QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#279109 | #7904. Rainbow Subarray | supepapupu# | WA | 138ms | 5468kb | C++17 | 1.9kb | 2023-12-08 11:08:26 | 2023-12-08 11:08:26 |
Judging History
answer
#include <bits/stdc++.h>
#define x first
#define y second
#define el '\n'
#define debug(x) cerr << #x << ": " << x << endl
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int N = 3e5 + 10, INF = 0x3f3f3f3f, mod = 998244353;
void solve() {
int n; ll k; cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; ++i) cin >> a[i], a[i] -= i;
int ans = 1;
ll s1 = 0, s2 = 0;
multiset<ll> Q1, Q2;
for (int i = 0, j = 0; i < n; ++i) {
if (Q1.empty() || a[i] >= *Q1.begin()) Q1.insert(a[i]), s1 += a[i];
else Q2.insert(a[i]), s2 += a[i];
while (Q1.size() >= Q2.size() + 2) {
s1 -= *Q1.begin(), s2 += *Q1.begin();
Q2.insert(*Q1.begin()), Q1.erase(Q1.begin());
}
while (Q1.size() < Q2.size()) {
s2 -= *Q2.rbegin(), s1 += *Q2.rbegin();
Q1.insert(*Q2.rbegin()), Q2.erase(Q2.find(*Q2.rbegin()));
}
// cout << j << ' ' << i << el;
// cout << s1 << ' ' << s2 << el;
// cout << *Q1.begin() << el;
while (j && s1 - Q1.size() * *Q1.begin() + Q2.size() * *Q1.begin() - s2 <= k) {
ans = max(ans, i - j + 1);
--j;
Q1.insert(a[j]), s1 += a[j];
while (Q1.size() >= Q2.size() + 2) {
s1 -= *Q1.begin(), s2 += *Q1.begin();
Q2.insert(*Q1.begin()), Q1.erase(Q1.begin());
}
if (s1 - Q1.size() * *Q1.begin() + Q2.size() * *Q1.begin() - s2 <= k) ans = max(ans, i - j + 1);
}
if (Q1.count(a[j])) Q1.erase(Q1.find(a[j])), s1 -= a[j];
else Q2.erase(Q2.find(a[j])), s2 -= a[j];
while (Q1.size() >= Q2.size() + 2) {
s1 -= *Q1.begin(), s2 += *Q1.begin();
Q2.insert(*Q1.begin()), Q1.erase(Q1.begin());
}
while (Q1.size() < Q2.size()) {
s2 -= *Q2.rbegin(), s1 += *Q2.rbegin();
Q1.insert(*Q2.rbegin()), Q2.erase(Q2.find(*Q2.rbegin()));
}
++j;
}
cout << ans << el;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int tcase = 1;
cin >> tcase;
while (tcase--) solve();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3400kb
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: 138ms
memory: 5468kb
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 5 1 1 3 3 2 7 8 7 7 1 7 6 2 4 3 1 7 7 7 3 4 3 9 3 8 6 6 3 1 6 3 1 2 4 7 4 6 4 1 5 7 1 7 3 5 6 7 1 7 5 3 1 6 5 5 3 3 3 7 2 3 10 1 4 3 2 4 5 1 7 5 5 5 8 5 3 6 3 5 5 9 5 4 5 3 1 5 3 3 3 5 8 1 3 1 2 2 8 3 1 6 8 1 8 4 5 6 6 9 4 8 3 2 8 4 5 6 2 7 2 4 1 5 4 5 3 3 4 1 2 1 5 5 9 3 7 3 3 3...
result:
wrong answer 11th lines differ - expected: '4', found: '5'