WA求助(关注大佬)
查看原帖
WA求助(关注大佬)
664744
_lqs_楼主2022/12/1 17:58
#include<bits/stdc++.h>
#define N 200005
using namespace std;
#define int long long
int n,m,i,j,ans,now;
int len,d[N<<2];
char id;
int x;
void build(int s,int t,int l,int r,int p){
    d[p]=max(d[p],s);
    if(l==r) return;
    int m=(l+r)>>1;
    if(t>=l && t<=m) build(s,t,l,m,p<<1);
    if(t>=m+1 && t<=r) build(s,t,m+1,r,(p<<1)+1);
}
int getans(int s,int t,int l,int r,int p){
    if(l>=s && r<=t) return d[p];
    int m=(l+r)>>1,sum=-1e18;
    if(s<=m) sum=max(sum,getans(s,t,l,m,p<<1));
    if(t>m)  sum=max(sum,getans(s,t,m+1,r,(p<<1)+1));
    return sum;
}
signed main(){
    scanf("%lld%lld",&n,&m);
    for(i=1;i<=n;i++){
        cin>>id>>x;
        if(id=='A'){
            len++;
            build((x+now)%m,len,1,len,1);
        }
        else{
            now=getans(len-x+1,len,1,len,1);
            printf("%lld\n",now);
        }
    }
    return 0;
}

我的思路就是每次要插入一个新的数就看看哪些节点包含这个区间,然后更新,复杂度是 O(nlogn)\mathcal{O}(nlogn) 的,但是全部WA了,大佬求调

2022/12/1 17:58
加载中...