P1198 [JSOI2008] 最大数 100pts 求条
  • 板块灌水区
  • 楼主Z_L_H
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/8 17:30
  • 上次更新2025/1/8 22:49:58
查看原帖
P1198 [JSOI2008] 最大数 100pts 求条
1510234
Z_L_H楼主2025/1/8 17:30

rt

#include<bits/stdc++.h>
using namespace std;
int m,D,x,n,t;
int lg[200005],st[200005][21];
char op;
int main()
{
	cin>>m>>D;
	for(int i = 2;i <= 200000;i ++)
	{
		lg[i] = lg[i / 2] + 1;
	}
	while(m --)
	{
		cin>>op>>x;
		if(op == 'Q')
		{
			int len = lg[x];
			t = max(st[n - x + 1][len],st[n - (1 << len) + 1][len]);
			cout<<t<<endl;
		}
		else
		{
			x = (x + t) % D;
			st[++ n][0] = x;
			for(int len = 1;len <= lg[n];len ++)
			{
				int j = n - (1 << len) + 1;
				st[j][len] = max(st[j][len - 1],st[j + (1 << len - 1)][len - 1]);
			}
		}
	}
	return 0;
}
2025/1/8 17:30
加载中...