社区讨论

9命

P1198[JSOI2008] 最大数参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo7gybzs
此快照首次捕获于
2023/10/27 01:39
2 年前
此快照最后确认于
2023/10/27 01:39
2 年前
查看原帖
思路哪里错了
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;

struct node
{
	ll l,r,sum;
}tree[400005];

ll m,d;
int lass,lest;
void build(ll p,ll l,ll r)
{
	tree[p].l=l;tree[p].r=r;tree[p].sum=0;
	if(l==r)return ;
	build(p<<1,l,(l+r)>>1);
	build((p<<1)+1,((l+r)>>1)+1,r);
}

void modify(ll p,ll a,ll b)
{
	if(tree[p].l>a||tree[p].r<a)return;
	if(tree[p].l==a&&tree[p].r==a)
	{
		tree[p].sum=b;
		return;
	}
	modify(p<<1,a,b);
	modify((p<<1)+1,a,b);
	tree[p].sum=max(tree[p<<1].sum,tree[(p<<1)+1].sum);
}

ll query(ll p,ll l,ll r)
{
	if(tree[p].l>r||tree[p].r<l)return 0;
	if(tree[p].l>=l&&tree[p].r<=r)
		return tree[p].sum;
	return max(query(p<<1,l,r),query((p<<1)+1,l,r));
}
int main()
{
	ll k,b;
	int num=0;
	char a;
	scanf("%lld%lld",&m,&d);
	build(1,0,100000);
	while(m--)
	{
		scanf("%c%lld",&a,&b);
		if(a=='A')
		{
			b=(b+lest)%d;
			modify(1,++lass,b);
		}
		else
		{
			lest=query(1,lass-b,lass);
			printf("%lld\n",lest);
		}
	}
}

回复

3 条回复,欢迎继续交流。

正在加载回复...