社区讨论
求助为什么0分
P1198[JSOI2008] 最大数参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi7rk2ss
- 此快照首次捕获于
- 2025/11/21 02:27 4 个月前
- 此快照最后确认于
- 2025/11/21 02:27 4 个月前
CPP
#include<iostream>
#include<cstdio>
using namespace std;
const int MAXN=200001;
typedef long long ll;
struct node{
int l;
int r;
ll val;
};
node tree[4*MAXN];
ll n,D,x,t=0,l=0;
char ask_or_add;
template<typename ReadType>void read(ReadType &n){
ReadType x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
n=x*f;
}
inline ll __max(ll a,ll b){
return a>b?a:b;
}
void add(int pos,int x,int val){
if(tree[pos].l==tree[pos].r){
tree[pos].val=val;
return;
}
int mid=(tree[pos].l+tree[pos].r)>>1;
if(mid>=x)add(pos<<1,x,val);
if(mid<x)add(pos<<1|1,x,val);
tree[pos].val=__max(tree[pos<<1].val,tree[pos<<1|1].val)%D;
}
ll query(int l,int r,int pos){
if(l<=tree[pos].l&&r>=tree[pos].r){
return tree[pos].val;
}
int mid=(l+r)>>1;
ll a=-1*(184467440737095516);
ll b=-1*(184467440737095516);
if(mid>=l)a=query(pos<<1,l,mid);
if(mid<r)b=query(pos<<1|1,mid+1,r);
return __max(a,b)%D;
}
int main()
{
read(n);read(D);
cout<<n;
int cur=0;
for(int i=1;i<=n;++i)
{
scanf("%c",&ask_or_add);
if(ask_or_add=='Q'){
read(x);
if(x==0)t=0;
else t=query(cur-x+1,cur,1);
printf("%d\n",t);
}
else{
read(x);
add(1,cur+1,(x+t)%D);
cur++;
}
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...