[杂题 贪心] BZOJ 2138 stone
来源:互联网 发布:算法艺术与信息学竞赛 编辑:程序博客网 时间:2024/06/05 10:31
#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline void read(int &x){ char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;}const int N=40005;struct SegMax{ ll T[N<<2],F[N<<2]; void Build(int x,int l,int r,ll *a){ if (l==r) return void(T[x]=a[l]); int mid=(l+r)>>1; Build(x<<1,l,mid,a); Build(x<<1|1,mid+1,r,a); T[x]=max(T[x<<1],T[x<<1|1]); } void push(int x){ if (F[x]) T[x<<1]+=F[x],T[x<<1|1]+=F[x],F[x<<1]+=F[x],F[x<<1|1]+=F[x],F[x]=0; } void Add(int x,int l,int r,int ql,int qr,ll a){ if (ql<=l && r<=qr){ T[x]+=a; F[x]+=a; return; } push(x); int mid=(l+r)>>1; if (ql<=mid) Add(x<<1,l,mid,ql,qr,a); if (qr>mid) Add(x<<1|1,mid+1,r,ql,qr,a); T[x]=max(T[x<<1],T[x<<1|1]); } ll Query(int x,int l,int r,int ql,int qr){ if (ql<=l && r<=qr) return T[x]; push(x); int mid=(l+r)>>1; ll ret=-1LL<<30; if (ql<=mid) ret=max(ret,Query(x<<1,l,mid,ql,qr)); if (qr>mid) ret=max(ret,Query(x<<1|1,mid+1,r,ql,qr)); return ret; }}G;struct SegMin{ ll T[N<<2],F[N<<2]; void Build(int x,int l,int r,ll *a){ if (l==r) return void(T[x]=a[l]); int mid=(l+r)>>1; Build(x<<1,l,mid,a); Build(x<<1|1,mid+1,r,a); T[x]=min(T[x<<1],T[x<<1|1]); } void push(int x){ if (F[x]) T[x<<1]+=F[x],T[x<<1|1]+=F[x],F[x<<1]+=F[x],F[x<<1|1]+=F[x],F[x]=0; } void Add(int x,int l,int r,int ql,int qr,ll a){ if (ql<=l && r<=qr){ T[x]+=a; F[x]+=a; return; } push(x); int mid=(l+r)>>1; if (ql<=mid) Add(x<<1,l,mid,ql,qr,a); if (qr>mid) Add(x<<1|1,mid+1,r,ql,qr,a); T[x]=min(T[x<<1],T[x<<1|1]); } ll Query(int x,int l,int r,int ql,int qr){ if (ql<=l && r<=qr) return T[x]; push(x); int mid=(l+r)>>1; ll ret=1LL<<60; if (ql<=mid) ret=min(ret,Query(x<<1,l,mid,ql,qr)); if (qr>mid) ret=min(ret,Query(x<<1|1,mid+1,r,ql,qr)); return ret; }}F;int n,m,a[N];ll s[N];int K[N];int main(){ int x,y,z,p,l,r; freopen("forget.in","r",stdin); freopen("forget.out","w",stdout); read(n); read(x); read(y); read(z); read(p); for (int i=1;i<=n;i++) a[i]=((ll)(i-x)*(i-x)+(ll)(i-y)*(i-y)+(ll)(i-z)*(i-z))%p,s[i]=s[i-1]+a[i]; F.Build(1,0,n,s); G.Build(1,0,n,s); read(m); read(K[1]); read(K[2]); read(x); read(y); read(z); read(p); for (int i=3;i<=m;i++) K[i]=((ll)x*K[i-1]+(ll)y*K[i-2]+z)%p; for (int i=1;i<=m;i++){ read(l); read(r); ll fmin=F.Query(1,0,n,r,n),gmax=G.Query(1,0,n,0,l-1); ll k=min((ll)K[i],fmin-gmax); printf("%lld\n",k); F.Add(1,0,n,r,n,-k); G.Add(1,0,n,l,n,-k); } return 0;}
阅读全文
0 0
- [杂题 贪心] BZOJ 2138 stone
- 【BZOJ 2138】stone
- BZOJ 2000([Hnoi2010]stone 取石头游戏-贪心博弈)
- BZOJ 2138: stone Hall定理 线段树
- hdu 4038 模拟+贪心 Stone
- hdu 4038 Stone(贪心模拟)
- hdoj 4038 Stone(贪心+快速幂)
- Codeforces 226B Naughty Stone Piles 贪心
- 【BZOJ】2000: [Hnoi2010]stone 取石头游戏
- stone
- Stone
- stone
- 【贪心】【bzoj 3008】: 象棋
- bzoj 1696 贪心
- BZOJ 3721 贪心
- bzoj 1034 泡泡堂|贪心
- 【贪心】 BZOJ 3252:攻略
- BZOJ 4027 贪心
- jemalloc 编译出错
- centos下 vi 配色方案问题
- gensim实现python对word2vec的训练和计算
- java获取对象的长度
- 喜欢上Cinnamon的10个理由
- [杂题 贪心] BZOJ 2138 stone
- levmar ndk 编译
- PHP 伪静态技术原理以及突破原理实现介绍
- 事务注释@Transactional
- WebGIS开发实习(一)——数据库连接
- Linux ftp 下载文件脚本
- LeetCode 617. Merge Two Binary Trees
- 创建servlet的三种方式
- Java声明变量并赋值