社区讨论
只有20分!其他全RE线段树?
P1198[JSOI2008] 最大数参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @ltfz9z08
- 此快照首次捕获于
- 2024/03/06 23:52 2 年前
- 此快照最后确认于
- 2024/03/06 23:55 2 年前
CPP
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+10;
int n,m;
ll ma[N>>3],ans,mod,k;
inline ll max (ll a,ll b)
{
return (a>b)?a:b;
}
void add (int nn,ll s,int i,int l, int r)
{
if (l==r) {
ma[i]=s;
return ;
}
int mid=(l+r)>>1;
if (mid>=nn) add(nn,s,i<<1,l,mid);
else add(nn,s,i<<1|1,mid+1,r);
ma[i]=max(ma[i<<1],ma[i<<1|1]);
}
ll query (int l1,int r1,int i,int l,int r)
{
// cout<<l1<<" "<<r1<<" "<<i<<endl;
if (l>=l1 && r<=r1) return ma[i];
int mid=(l+r)>>1;
ll a=0,b=0;
if (l1<=mid) a=query(l1,r1,i<<1,l,mid);
if (r1>mid) b=query(l1,r1,i<<1|1,mid+1,r);
return max(a,b);
}
int main()
{
scanf("%lld%lld",&m,&mod);
for (int i=1;i<=m;i++) {
char f;
cin>>f;
if (f=='Q') {
scanf("%lld",&k);
ans=query(n-k+1,n,1,1,m);
printf("%lld\n",ans);
}
else {
scanf("%lld",&k);
add(++n,(k+ans)%mod,1,1,m);
}
// for (int j=1;j<=m*2;j++) cout<<ma[j]<<" ";
// cout<<endl;
}
return 0;
}
/*
4 100
A 96
Q 1
A 97
Q 1
*/
回复
共 0 条回复,欢迎继续交流。
正在加载回复...