QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#691358#7904. Rainbow SubarrayHomuraAkemi#WA 96ms5844kbC++231.9kb2024-10-31 11:07:242024-10-31 11:07:24

Judging History

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

  • [2024-10-31 11:07:24]
  • 评测
  • 测评结果:WA
  • 用时:96ms
  • 内存:5844kb
  • [2024-10-31 11:07:24]
  • 提交

answer

#include<iostream>
#include<algorithm>
#include<set>
using ll=long long;
const int sz=5e5+10;
int a[sz];
int main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int t;
    std::cin>>t;
    while(t--)[](){
        int n;
        ll k;
        std::cin>>n>>k;
        for(int i=1;i<=n;i++)std::cin>>a[i],a[i]-=i;
        std::multiset<ll>ls,rs;
        ll res=0;
        auto add=[&](ll x){
            if(ls.empty()||x>*ls.rbegin()){
                rs.insert(x),res+=x;
                while(ls.size()+1<=rs.size()){
                    int t=*rs.begin();
                    ls.insert(t),res-=2*t;
                    rs.erase(rs.begin());
                }
            }else{
                ls.insert(x),res-=x;
                while(ls.size()-rs.size()>1){
                    ll t=*ls.rbegin();
                    rs.insert(t),res+=2*t;
                    ls.erase(--ls.end());
                }
            }
            return *ls.rbegin();
        };
        auto del=[&](ll x){
            if(rs.empty()||x<*rs.begin()){
                ls.erase(ls.find(x)),res+=x;
                while(ls.size()+1<=rs.size()){
                    ll t=*rs.begin();
                    ls.insert(t),res-=2*t;
                    rs.erase(rs.begin());
                }
            }else{
                rs.erase(rs.find(x)),res-=x;
                while(ls.size()-rs.size()>1){
                    ll t=*ls.rbegin();
                    rs.insert(t),res+=2*t;
                    ls.erase(--ls.end());
                }
            }
        };
        int ans=0;
        ll mid;
        for(int l=1,r=1;l<=n;l++){
            r=std::max(l,r);
            while(r<=n&&(mid=add(a[r]),res+(ll)ls.size()*mid-(ll)rs.size()*mid<=k))++r;
            del(a[l]),ans=std::max(ans,r-l);
        }
        std::cout<<ans<<"\n";
    }();
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3608kb

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: 96ms
memory: 5844kb

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
1
2
6
5
7
2
4
1
4
1
1
2
2
2
7
7
7
7
1
6
5
2
4
3
1
5
7
7
3
4
3
9
3
8
6
6
1
1
5
1
1
2
4
5
4
6
4
1
3
6
1
6
3
5
6
6
1
7
5
3
1
6
3
5
3
2
2
6
1
3
10
1
4
1
1
4
5
1
5
5
5
5
8
5
3
6
3
5
5
8
5
3
5
2
1
5
2
2
3
4
8
1
3
1
2
2
8
3
1
6
8
1
8
4
5
6
6
7
2
8
3
2
7
4
5
5
2
6
2
4
1
5
4
5
2
2
4
1
2
1
2
3
8
3
6
3
3
2...

result:

wrong answer 3rd lines differ - expected: '3', found: '1'