ST表求助
查看原帖
ST表求助
636692
Castaways楼主2023/10/10 14:45

不知道为什么,样例输出"0 0 97"。

#include<bits/stdc++.h>
#define Steam(a) freopen(#a".in","r",stdin); //freopen(#a".out","w",stdout);
#define Epic ios::sync_with_stdio(false);
#define ff(e,u) for(int e=h[u];e;e=nxt[e])
#define f1(i,a,b) for(int i=(a);i<=(b);i++)
#define f2(i,a,b) for(int i=(a);i>=(b);i--)
#define int long long
#define maxn 2000010
using namespace std;
int m,d;
int a[maxn];
int st[maxn][22];
int Log[maxn];
int cnt;
int h[maxn],nxt[maxn],to[maxn];
void add(int u,int v){
    cnt++;
    nxt[cnt]=h[u];
    h[u]=cnt;
    to[cnt]=v;
};
class link_list{
    struct node{

    };
     
};
// void init(){
//     Log[0]=-1;
//     f1(i,1,m){
//         Log[i]=(i&&(i-1)==0)?Log[i-1]+1:Log[i-1];
//         st[i][0]=a[i];
//     };
//     for(int j=1;(1<<j)<=m;j++) for(int i=1;(1<<j)<=m-i+1;i++)
//         st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
// };
int max(int x,int y){return x>y?x:y;};
int min(int x,int y){return x<y?x:y;};

//查询;
int query(int l,int r){
    int k=Log[r-l+1];
    return max(st[l][k],st[r-(1<<k)+1][k]);
};
int point;

//新增加;
void change(int j,int value){
    Log[j]=(j&&(j-1)==0)?Log[j-1]+1:Log[j-1];
    st[j][0]=value;
    for(int i=1;(1<<j)<=point-i+1;i++) st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
};
signed main(){
	//Steam()
	Epic;
    int last=0;
    Log[0]=-1;
    cin>>m>>d;
    f1(i,1,m){
        char op;
        int x;
        cin>>op>>x;
        if(op=='A'){
            point++;
            change(point,(x+last)%d);            
        }else{
            if(x==1){
                last=a[point];
                cout<<last<<endl;
                continue;
            };
            last=query(point-x+1,point);
            cout<<last<<endl;
        };
    };
	return 0;
};
2023/10/10 14:45
加载中...