博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[JSOI2008]最大数
阅读量:5073 次
发布时间:2019-06-12

本文共 1286 字,大约阅读时间需要 4 分钟。

线段树。。。板子。。。不能再板子了。。。

一开始用了cin读字符。。。结果bzoj上T了。。。

然后修改了一下。。。过了。。。

呆码:

#include
#include
#define INF -99999999#define N 200020using namespace std;int len,n,t,m,mo,sum[N<<2];char ch;inline void build(int rt,int l,int r){ if(l==r) { sum[rt]=INF; return; } int mid=l+r>>1; build(rt<<1,l,mid); build(rt<<1|1,mid+1,r); sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);}inline void update(int rt,int l,int r,int L,int k){ if(l==r) { sum[rt]=k; return; } int mid=l+r>>1; if(L<=mid) update(rt<<1,l,mid,L,k); else update(rt<<1|1,mid+1,r,L,k); sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);}inline int query(int rt,int l,int r,int L,int R){ if(L<=l && r<=R) { return sum[rt]; } int mid=l+r>>1; int ans=INF; if(L<=mid) ans=max(ans,query(rt<<1,l,mid,L,R)); if(R>mid) ans=max(ans,query(rt<<1|1,mid+1,r,L,R)); return ans;}int main(){ scanf("%d%d",&m,&mo); build(1,1,200000); for(int i=1;i<=m;i++) { ch='F'; while(ch!='A' && ch!='Q') ch=getchar(); scanf("%d",&n); if(ch=='A') { update(1,1,N-20,len+1,(n+t)%mo); len+=1; } if(ch=='Q') { t=query(1,1,N-20,len-n+1,len); printf("%d\n",t); } }}
代码

 

转载于:https://www.cnblogs.com/zzzyc/p/9306228.html

你可能感兴趣的文章