QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#693896#7904. Rainbow Subarraytest_algth#Compile Error//C++142.6kb2024-10-31 16:55:382024-10-31 16:55:40

Judging History

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

  • [2024-10-31 16:55:40]
  • 评测
  • [2024-10-31 16:55:38]
  • 提交

answer

#include<bitsdc++.h>
#define ll long long
#define ls(k) (k<<1)
#define rs(k) (k<<1|1)
using namespace std;
const int MAXN = 5e5+5;
const int INF = 1e9;
bool address_start;
ll sum[MAXN<<2],A[MAXN],m,lsh[MAXN];
int cnt[MAXN<<2],n;
bool address_end;


void pushup(int k)
{
    sum[k]=sum[ls(k)]+sum[rs(k)];
    cnt[k]=cnt[ls(k)]+cnt[rs(k)];
}

void build(int k,int l,int r)
{
    sum[k]=cnt[k]=0;
    if(l==r) return ;
    int mid=l+r>>1;
    build(ls(k),l,mid);
    build(rs(k),mid+1,r);
}

void upd(int k,int l,int r,int x,int v)
{
    if(l==r)
    {
        sum[k]+=lsh[l]*v;
        cnt[k]+=v;
        return ;
    }
    int mid=l+r>>1;
    if(x<=mid) upd(ls(k),l,mid,x,v);
    else upd(rs(k),mid+1,r,x,v);
    pushup(k);
}
int find_num(int k,int l,int r,int c)
{
    if(l==r) return l;
    int mid=l+r>>1;
    if(cnt[ls(k)]>=c) return find_num(ls(k),l,mid,c);
    else return find_num(rs(k),mid+1,r,c-cnt[ls(k)]);
}
ll get_sum(int k,int l,int r,int c)
{
    int mid=l+r>>1;
    if(l==r) return sum[k];
    if(cnt[ls(k)]>=c) return get_sum(ls(k),l,mid,c);
    else return sum[ls(k)]+get_sum(rs(k),mid+1,r,c-cnt[ls(k)]);
}
ll get_Modifycount(int l,int r)
{
    int len=r-l+1,mid=len+1>>1,num=find_num(1,1,n,mid);

    return 1ll*mid*lsh[num]-1ll*(len-mid)*lsh[num] +
           sum[1]-2ll*get_sum(1,1,n,mid);
}
int main()
{
    // cout<<1.0*(&address_end-&address_start)/1024/1024<<"MB"<<endl;

    int T;scanf("%d",&T);
    while(T--)
    {
        scanf("%d %lld",&n,&m);
        for(int i=1;i<=n;++i) scanf("%lld",&A[i]),A[i]-=i,lsh[i]=A[i];
        
        int tot=0;
        sort(lsh+1,lsh+1+n);
        tot=unique(lsh+1,lsh+1+n)-lsh-1;

        for(int i=1;i<=n;++i) A[i]=lower_bound(lsh+1,lsh+1+tot,A[i])-lsh;

        build(1,1,n);

        // for(int i=1;i<=n;++i) upd(1,1,n,A[i],1);
        upd(1,1,n,A[1],1);
        
        int r=2,ans=1;ll Modifycount=0;
        for(int l=1;l<=n;++l)
        {
            Modifycount=get_Modifycount(l,r-1);

            // cout<<"debug:"<<Modifycount<<" "<<l<<" "<<r-1<<endl;

            while(r<=n&&Modifycount<=m)
            {
                upd(1,1,n,A[r],1);
                ++r;

                Modifycount=get_Modifycount(l,r-1);
                if(Modifycount<=m) ans=max(ans,r-l);

                // cout<<"debug:"<<Modifycount<<" "<<l<<" "<<r-1<<endl;

                
            }

            // cout<<"len:"<<r-l<<endl;

            if(Modifycount<=m) ans=max(ans,r-l);
            upd(1,1,n,A[l],-1);
        }
        printf("%d\n",ans);
    }
    return 0;
}

詳細信息

answer.code:1:9: fatal error: bitsdc++.h: No such file or directory
    1 | #include<bitsdc++.h>
      |         ^~~~~~~~~~~~
compilation terminated.