QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#390553#7904. Rainbow Subarrayryh7WA 139ms6092kbC++202.3kb2024-04-15 16:56:332024-04-15 16:56:33

Judging History

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

  • [2024-06-09 00:00:26]
  • hack成功,自动添加数据
  • (/hack/652)
  • [2024-04-15 16:56:33]
  • 评测
  • 测评结果:WA
  • 用时:139ms
  • 内存:6092kb
  • [2024-04-15 16:56:33]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using VI = vector<int>;
using PII = pair<ll,ll>;
using VVI = vector<vector<int>>;
const ll mod = 998244353;
const ll INF = 1e18;
const int N = 1e5 + 10;


struct ds{
    ll b = 0,s = 0;
    multiset<ll> pb;
    multiset<ll,greater<ll>> ps;
    void insert(ll x){
        if(pb.size() == 0 || (*pb.begin()) <= x){
            //cout<<1;
            b += x;
            pb.insert(x);
        }else{
            s += x;
            ps.insert(x);
        }
        bal();
    }
    void bal(){
        if(pb.size() == 0) return;
        if(pb.size() < ps.size()){
            auto u = ps.begin();
            ps.erase(u);
            pb.insert(*u);
            s -= *u;
            b += *u;

        }else if(ps.size() < pb.size() - 1){
            auto u = pb.begin();
            pb.erase(u);
            ps.insert(*u);
            b -= *u;
            s += *u;

        }

    }

    ll mid(){
        if(pb.size() == 0) return 0;
        return *pb.begin();
    }

    ll query(){
        return b - (mid() * pb.size()) + (mid() * ps.size()) - s;

    }

    void del(ll x){
        if(pb.find(x) != pb.end()) {
            auto u = pb.find(x);
            pb.erase(u);
            b -= x;
        }else if(ps.find(x) != ps.end()){
            auto u = ps.find(x);
            ps.erase(u);
            s -= x;
        }
        bal();
    }

};


ll n,k;
int a[N];
void solve(){
    cin>>n>>k;
    for(int i = 1 ; i <= n ; i++){
        cin>>a[i];
        a[i] -= i;
    }
    ds s;
    int j = 0;
    int res = 1;
    for(int i = 1 ; i <= n ; i++){
        //if(i == 2) cout<<s.query()<<"\n";
        while(j <= n && s.query() <= k){
            j++;
            if(j > n) break;
            s.insert(a[j]);
           /* if(i == 1 && j == 2) {
            	cout<<s.pb.size()<<" ";
            	cout<<s.ps.size()<<" ";
            	cout<<s.b<<" "<<s.s<<" ";
            	cout<<s.mid()<<" ";
            	cout<<s.query()<<" ";
            }*/
        }
       	//cout<<i<<" "<<j<<"\n";
        res = max(res , j - i);
        s.del(a[i]);
    }
    cout<<res<<"\n";

}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T;cin>>T;while(T--)solve();

}


//5 4 3 2 1
//5 4 3 2 1

详细

Test #1:

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

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: 139ms
memory: 6092kb

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
5
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 25th lines differ - expected: '4', found: '5'