为什么会re啊!!!,求助
查看原帖
为什么会re啊!!!,求助
1524431
yangBO__楼主2024/12/7 22:20
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e5+50;
ll n,m;
ll arr[N];

void add(ll k,ll l,ll r,ll i,ll v){
    if(l==r&&l==i){arr[k]=v;return ;}
    ll mid=(l+r)/2;
    if(i<=mid){
        add(2*k,l,mid,i,v);
    }else {
        add(2*k+1,mid+1,r,i,v);
    }
    arr[k]=max(arr[2*k],arr[2*k+1]);
}

ll query(ll k,ll l,ll r,ll lq,ll rq){
    if(l>=lq&&r<=rq){
        return arr[k];
    }
    ll mid=(l+r)/2;
    ll maxx=-0x3ffffffff;
    if(lq<=mid){
        maxx=max(query(2*k,l,mid,lq,rq),maxx);
    }
    if(rq>mid){
        maxx=max(query(2*k+1,mid+1,r,lq,rq),maxx);
    }
    return maxx;
}

int main(){
    scanf("%lld %lld\n",&n,&m);
    memset(arr,0,sizeof(arr));
    char c;
    ll t=0,d,line=0;
    ll ans=0,x=n;
    while(x--){
        cin >> c;
        //cout << d << endl;
        if(c=='A'){
            scanf("%lld\n",&d);
            line++;
            add(1,1,n,line,(d+t)%m);
        }else {
            scanf("%lld\n",&d);
            if(!d)ans=0;
            ans=query(1,1,n,line-d+1,line);
            t=ans;
            cout << ans << endl;
        }
    }
    return 0;
}
2024/12/7 22:20
加载中...