求助,倍增,0分,只能改过样例
查看原帖
求助,倍增,0分,只能改过样例
939931
Addicted_Game楼主2023/11/3 18:52
#include<bits/stdc++.h>
using namespace std;
long long m,q;
long long l;
long long a[200005][35];
long long n;
long long jg;
void add(){
    long long s=log2(n);
    for(long long i=1;i<=s;i++){//退化为1维 
        long long t1=n-(1<<s)+1;
        a[t1][s]=max(a[t1][s-1],a[t1+(1<<(i-1))][s-1]);
    }//这里有问题 很奇怪,本地都能过WA 
}
long long qu(long long l){
	long long j=log2(n-l+1);
	return max(a[l][j],a[n-(1<<j)+1][j]);
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>m>>q;
	char a1;
	while(m--){
		cin>>a1>>l;
		if(a1=='Q'){
			jg=qu(n-l+1);
			cout<<jg<<endl;
		}else if(a1=='A'){
			a[++n][0]=(l+jg)%q;
			add(); 
		}
	} 
	//for(long long i=1;i<=n;i++) for(long long j=0;j<=20;j++) cout<<a[i][j]<<endl;
	return 0;
}
2023/11/3 18:52
加载中...