QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#300781#7904. Rainbow Subarray__jk__#WA 1230ms6612kbC++142.3kb2024-01-08 19:56:592024-01-08 19:56:59

Judging History

你现在查看的是最新测评结果

  • [2024-06-09 00:00:26]
  • hack成功,自动添加数据
  • (/hack/652)
  • [2024-01-08 19:56:59]
  • 评测
  • 测评结果:WA
  • 用时:1230ms
  • 内存:6612kb
  • [2024-01-08 19:56:59]
  • 提交

answer

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define int long long
#define double long double
#define x first
#define y second
#define pb push_back
using namespace std;
using pii=pair <int,int>;
using tii=pair <pii,int>;
using rii=pair <int,pii>;
using qii=pair <pii,pii>;
using namespace __gnu_pbds;
const int mod=998244353LL;
void solve(){
    int n,k;
    cin>>n>>k;
    int a[n+1];
    for (int i=1; i<=n; i++) cin>>a[i];
    for (int i=1; i<=n; i++) a[i]-=i;
    int l=1,r=n;
    while (l<r){
        int mid=(l+r+1)/2;
        bool ok=0;
        int sums=0,suml=0;
        multiset <int> sm,la;
        for (int i=1; i<=mid; i++){
            sm.insert(a[i]);
            sums+=a[i];
        }
        while (sm.size()>mid/2){
            auto it=(--sm.end());
            sums-=(*it);
            suml+=(*it);
            la.insert(*it);
            sm.erase(it);
        }
        if (suml-(int)la.size()*(*la.begin())+(int)sm.size()*(*la.begin())-sums<=k) ok=1;
        for (int i=2; i+mid-1<=n; i++){
            auto it=sm.find(a[i-1]);
            if (it!=sm.end()){
                sums-=a[i-1];
                sm.erase(it);
            } else {
                suml-=a[i-1];
                la.erase(la.find(a[i-1]));
            }
            if (a[i+mid-1]>=(*la.begin())){
                la.insert(a[i+mid-1]);
                suml+=a[i+mid-1];
            } else {
                sm.insert(a[i+mid-1]);
                sums+=a[i+mid-1];
            }
            while (sm.size()<mid/2){
                auto it=la.begin();
                sums+=(*it);
                suml-=(*it);
                sm.insert(*it);
                la.erase(it);
            }
            while (sm.size()>mid/2){
                auto it=(--sm.end());
                sums-=(*it);
                suml+=(*it);
                la.insert(*it);
                sm.erase(it);
            }
            if (suml-(int)la.size()*(*la.begin())+(int)sm.size()*(*la.begin())-sums<=k) ok=1;
        }
        if (ok) l=mid;
        else r=mid-1;
    }
    cout<<l<<'\n';
}
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    int t=1;
    cin>>t;
    while (t--) solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3440kb

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: 1230ms
memory: 6612kb

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
2
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 50th lines differ - expected: '1', found: '2'