QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#279091#7904. Rainbow SubarrayyolxWA 312ms6988kbC++203.4kb2023-12-08 10:44:572023-12-08 10:44:58

Judging History

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

  • [2024-06-09 00:00:26]
  • hack成功,自动添加数据
  • (/hack/652)
  • [2023-12-08 10:44:58]
  • 评测
  • 测评结果:WA
  • 用时:312ms
  • 内存:6988kb
  • [2023-12-08 10:44:57]
  • 提交

answer

//音乐是苍白的鬼魂,就像玫瑰是疯狂而必死的美:她苍白而必死
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ll long long
#define ull unsigned long long
#define fi first
#define se second
#define vec vector
#define pb push_back
#define PDD pair<double,double>
#define PLL pair<ll,ll>
#define PII pair<int,int>
#define INF 0x3f3f3f3f
#define i128 __int128
#define ld long double
#define pi 3.1415926535
//const ll mod=1e9+7;
const ll mod=998244353;
bool isprime(ll x){
    if(x==1)return false;
    for(ll i=2;i<=x/i;i++){
        if(x%i==0)return false;
    }
    return true;
}
ll popcnt(ll x){
    ll cnt=0;
    while(x){
        if(x&1)cnt++;
        x>>=1;
    }
    return cnt;
}
ll qmi(ll a,ll b,ll p){
    if(a==0)return 1;
    a%=p;
    ll res=1;
    while(b){
        if(b&1)res=res*a%p;
        a=a*a%p;
        b>>=1;
    }
    return res;
}
ll exgcd(ll a,ll b,ll &x,ll &y){
    if(!b){
        x=1,y=0;
        return a;
    }
    ll d=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}
ll lowbit(ll x){return x&-x;}
const int N=1e6+10;
ll fact[N],infact[N];
ll C(ll n,ll m) {
    if (n < m || m < 0)return 0;
    return fact[n] * qmi(fact[m] * fact[n - m] % mod, mod - 2, mod) % mod;
}
//ll C(ll n,ll m){
//    if (n < m || m < 0)return 0;
//    return fact[n]%mod*infact[m]%mod*infact[n-m]%mod;
//}
//void scan(__int128 &x)
//{
//    x=0;int f=1;char ch=getchar();
//    while (!isdigit(ch)){if (ch=='-')f=-1;ch=getchar();}
//    while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
//    x*=f;
//}
//inline void print(__int128 x) {
//    if (x < 0) {
//        putchar('-');
//        x = -x;
//    }
//    if (x > 9) print(x / 10);
//}
//--------------------------------------------
ll n,k;
int a[N];
bool check(int x){
    if(x==1)return 1;
    ll sum1=0,sum2=0;
    priority_queue<int>q1;
    priority_queue<int,vec<int>,greater<int>>q2;
    for(int i=1;i<=x;i++){
        if(q1.empty()||q1.top()>=a[i])q1.push(a[i]),sum1+=a[i];
        else q2.push(a[i]),sum2+=a[i];
        if(q1.size()>q2.size()+1)sum1-=q1.top(),sum2+=q1.top(),q2.push(q1.top()),q1.pop();
        if(q2.size()>q1.size())sum2-=q2.top(),sum1+=q2.top(),q1.push(q2.top()),q2.pop();
    }
    ll ans,t1=0,t2=0;
    if(x&1){
        ll mid=q1.top();
        ans=sum2-sum1+mid;
    }
    else ans=sum2-sum1;
    for(int i=x+1;i<=n;i++){
        if(a[i-x]==q1.top())sum1-=a[i-x],q1.pop();
        else if(a[i-x]==q2.top())sum2-=a[i-x],q2.pop();
        else if(a[i-x]<q1.top())sum1-=a[i-x],t1++;
        else sum2-=a[i-x],t2++;
        if(q1.empty()||q1.top()>=a[i])q1.push(a[i]),sum1+=a[i];
        else q2.push(a[i]),sum2+=a[i];
        if(q1.size()-t1>q2.size()+1-t2)sum1-=q1.top(),sum2+=q1.top(),q2.push(q1.top()),q1.pop();
        if(q2.size()-t2>q1.size()-t1)sum2-=q2.top(),sum1+=q2.top(),q1.push(q2.top()),q2.pop();
        if(x&1){
            ll mid=q1.top();
            ans=min(ans,abs(sum2-sum1+mid));
        }
        else ans=min(ans,abs(sum2-sum1));
    }
    return ans<=k;
}
void solve(){
    cin>>n>>k;
    for(int i=1;i<=n;i++)cin>>a[i],a[i]-=(i-1);
    int l=1,r=n;
    while(l<r){
        int mid=(l+r+1)>>1;
        if(check(mid))l=mid;
        else r=mid-1;
    }
    cout<<l<<endl;
}
int main() {
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int T = 1;
    cin>>T;
    while (T--)solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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: 312ms
memory: 6988kb

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
2
2
4
1
2
1
4
4
8
3
7
3
3
3...

result:

wrong answer 137th lines differ - expected: '3', found: '2'