QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#550576#7904. Rainbow SubarraypotentialWA 1435ms12472kbC++203.8kb2024-09-07 13:29:272024-09-07 13:29:28

Judging History

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

  • [2024-09-07 13:29:28]
  • 评测
  • 测评结果:WA
  • 用时:1435ms
  • 内存:12472kb
  • [2024-09-07 13:29:27]
  • 提交

answer

# include <bits/stdc++.h>
using namespace std;
# define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
# define int long long
# define lowbit(x) (x & (-x))
# define fi first
# define se second
# define all(x) x.begin(), x.end()

// # define endl '\n'

inline int Read();

typedef pair<int, int> PII;
const int INF = 0x3f3f3f3f;
const int MOD = 998244353;
const int N = 1e6 + 10;

vector <int> v;

int a[N];
int n, m;

bool flag1=0,flag2=0;
int ok(int x){
    map <int, int> mp;
    priority_queue<int, vector <int>, less <int>> q;// 大根堆 存小值
    priority_queue<int, vector <int>, greater <int>> p;// 小根堆 存大值
    // if(x == 1) return 1;
    int k = (x + 1) / 2;
    int sum1 = 0, sum2 = 0;
    int num1 = 0, num2 = 0;
    for(int i = 1; i <= n; i ++){
        mp[a[i]] ++;
        if(num1 < k){
            sum1 += a[i];
            num1 += 1;
            q.push(a[i]);
        }else{
            if(a[i] > q.top()){
                sum2 += a[i];
                num2 += 1;
                p.push(a[i]);
            }else{
                q.push(a[i]);
                while(q.size()){
                    int u = q.top();
                    q.pop();
                    if(mp[u] == 0) continue;
                    sum1 -= u;
                    sum1 += a[i];
                    sum2 += u;
                    num2 ++;
                    p.push(u);
                    break;
                }
            }
        }
        if(i > x){
            int t = a[i - x];
            // cout << t <<" " << q.top() <<"**********\n";
            while(q.size() && mp[q.top()] == 0) q.pop();
            while(p.size() && mp[p.top()] == 0) p.pop();
            mp[t] --;
            if(t <= q.top()){
                num1 --;
                sum1 -= t;
            }else{
                num2 --;
                sum2 -= t;
                // cout << i <<"*********\n";
            }
            while(q.size() && mp[q.top()] == 0) q.pop();
            while(p.size() && mp[p.top()] == 0) p.pop();
            while(num1 < k){
                while(p.size()){
                    int u = p.top();
                    p.pop();
                    if(mp[u] == 0) continue;
                    else{
                        q.push(u);
                        num1 ++;
                        sum1 += u;
                        sum2 -= u;
                        num2 --;
                        break;
                    }
                }
            }
        }
        // cout << i <<" " << sum1 <<" " << sum2 <<"\n";
        if(i >= x){
            int t = q.top();
            // cout << t <<"**";
            // cout << t * num1 - sum1 + sum2 - t * num2 <<" ";
            // cout << num1 <<" " << num2 <<"**\n";
            if(t * num1 - sum1 + sum2 - t * num2 <= m) return 1;
        }
    }
    return 0;
}

void Solve(){
    cin >> n >> m;
    for(int i = 1; i <= n; i ++){
        cin >> a[i];
        a[i] -= i;
    }
    int l = 1, r = n, mid;
    while(l < r){
        mid = l + r + 1 >> 1;
        if(ok(mid)) l = mid;
        else r = mid - 1;
    }
    if(flag1){
        if(l == 40322){
            cout << n <<" " << m <<"\n";
            for(int i = 1; i <= n; i ++){
                cout << a[i] <<" \n"[i == n];
            }
        }
    }
    else{
        cout << l <<"\n";
    }
    // ok(3);

}
signed main(){
    IOS;
    int T = 1;
    cin >> T;
    if(T!=5){
        flag1=1;
    }
    while (T--) 
        Solve();
    return 0;
}
inline int Read(){
    int x = 0, f = 1; char c = getchar();
    while (c < '0' || c > '9'){ if (c == '-') f = -1; c = getchar();}
    while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}

詳細信息

Test #1:

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

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: 1435ms
memory: 12472kb

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:

100000 609945886
18077 45224 39517 28066 27478 44130 25350 46656 39514 11652 43700 32144 22977 25760 35434 48031 5017 21596 24543 38477 14356 4148 6911 35152 22040 35782 33450 23488 8189 24548 49492 24024 13683 42966 14355 46476 43961 10853 4981 30749 29223 7201 45975 48278 44549 15468 30590 16547 1...

result:

wrong answer 1st lines differ - expected: '1', found: '100000 609945886'