QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#661666 | #7904. Rainbow Subarray | SMTTY | WA | 98ms | 5072kb | C++14 | 1.9kb | 2024-10-20 17:26:31 | 2024-10-20 17:26:32 |
Judging History
answer
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
typedef long long ll;
const int N = 500010;
int n;
ll k;
int a[N];
struct Heap{
priority_queue<int> Q, E;
void insert(int x) { Q.push(x); }
void erase(int x) { E.push(x); }
int top(){
while (E.size() && Q.top() == E.top()) Q.pop(), E.pop();
return Q.size() ? Q.top() : -0x3f3f3f3f;
}
void pop(){
while (E.size() && Q.top() == E.top()) Q.pop(), E.pop();
if (Q.size()) Q.pop();
}
int size() { return Q.size() - E.size(); }
};
void solve(){
scanf("%d%lld", &n, &k);
for (int i = 1; i <= n; i ++ ) scanf("%d", a + i);
for (int i = 1; i <= n; i ++ ) a[i] -= i;
ll s1 = 0, s2 = 0;
Heap q1, q2;
int ans = 0;
auto adjust = [&](){
while (q1.size() > q2.size() + 1){
int t = q1.top();
q1.erase(t), q2.insert(-t);
s1 -= t, s2 += t;
}
while (q1.size() < q2.size()){
int t = -q2.top();
q1.insert(t), q2.erase(-t);
s1 += t, s2 -= t;
}
};
for (int l = 1, r = 1; r <= n; r ++ ){
if (q1.size() == 0 || a[r] > q1.top()) q2.insert(-a[r]), s2 += a[r];
else q1.insert(a[r]), s1 += a[r];
adjust();
ll mid = q1.top(), tmp = mid * q1.size() - s1 + s2 - mid * q2.size();
if (a[r] == -1)
a[r] = -1;
while (tmp > k && l < r){
if (a[l] > q1.top()) q2.erase(-a[l]), s2 -= a[l];
else q1.erase(a[l]), s1 -= a[l];
adjust();
l++;
q1.top(), tmp = mid * q1.size() - s1 + s2 - mid * q2.size();
}
ans = max(ans, r - l + 1);
adjust();
}
printf("%d\n", ans);
}
int main(){
int _;
scanf("%d", &_);
while (_ -- ) solve();
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 4096kb
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: 98ms
memory: 5072kb
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 5822nd lines differ - expected: '5', found: '4'