为什么分块会超时?(P1198)
  • 板块题目总版
  • 楼主liyuan2023
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/25 17:01
  • 上次更新2024/8/25 19:59:48
查看原帖
为什么分块会超时?(P1198)
1188691
liyuan2023楼主2024/8/25 17:01
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int n,mod,d,a[N],id[N],qk[500],x,t=0,cnt=0;
char op;
int query(int l,int r){
	int ans=0;
	for(int i=l;i<=max(r,id[l]*d);i++){
		ans=max(ans,a[i]);
	}
	if(id[l]!=id[r]){
		for(int i=(id[r]-1)*d+1;i<=r;i++){
			ans=max(ans,a[i]);
		}
	}
	for(int i=id[l]+1;i<=id[r]-1;i++){
		ans=max(ans,qk[i]);
	}
	return ans;
}
signed main(){
	d=sqrt(N);
	cin>>n>>mod;
	for(int i=1;i<=n;i++){
		cin>>op>>x;
		if(op=='Q'){
			t=query(cnt-x+1,cnt);
			cout<<t<<endl;
		}
		else{
			cnt++;
			a[cnt]=(x+t)%mod;
			id[cnt]=(cnt-1)/d+1;
			qk[id[cnt]]=max(qk[id[cnt]],a[cnt]);
		}
	}
	return 0;
}
2024/8/25 17:01
加载中...