HDU - 5306 Gorgeous Sequence (吉司机线段树)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了HDU - 5306 Gorgeous Sequence (吉司机线段树),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2003字,纯文字阅读大概需要3分钟。
内容图文
吉司机线段树裸题...
1 #include<bits/stdc++.h> 2usingnamespace std; 3 typedef longlong ll; 4const ll N=1e6+10,inf=0x3f3f3f3f3f3f3f3f; 5 ll n,m,a[N],mx[N<<2],se[N<<2],nmx[N<<2],lz[N<<2]; 6 ll sum[N<<2]; 7#define ls (u<<1) 8#define rs (u<<1|1) 9#define mid ((l+r)>>1) 10void pu(ll u) { 11 sum[u]=sum[ls]+sum[rs]; 12 mx[u]=max(mx[ls],mx[rs]),se[u]=min(mx[ls],mx[rs]); 13 se[u]=se[u]==mx[u]?max(se[ls],se[rs]):max(se[u],max(se[ls],se[rs])); 14 nmx[u]=(mx[ls]==mx[u]?nmx[ls]:0)+(mx[rs]==mx[u]?nmx[rs]:0); 15} 16void change(ll u,ll x) {sum[u]-=(mx[u]-x)*nmx[u],mx[u]=lz[u]=x;} 17void pd(ll u) { 18if(~lz[u]) { 19if(mx[ls]>lz[u])change(ls,lz[u]); 20if(mx[rs]>lz[u])change(rs,lz[u]); 21 lz[u]=-1; 22 } 23} 24void upd(ll L,ll R,ll x,ll u=1,ll l=1,ll r=n) { 25if(l>R||r<L||mx[u]<=x)return; 26if(l>=L&&r<=R&&se[u]<x) {change(u,x); return;} 27 pd(u),upd(L,R,x,ls,l,mid),upd(L,R,x,rs,mid+1,r),pu(u); 28} 29 ll qrymx(ll L,ll R,ll u=1,ll l=1,ll r=n) { 30if(l>R||r<L)return ~inf; 31if(l>=L&&r<=R)return mx[u]; 32 pd(u); 33return max(qrymx(L,R,ls,l,mid),qrymx(L,R,rs,mid+1,r)); 34} 35 ll qrysum(ll L,ll R,ll u=1,ll l=1,ll r=n) { 36if(l>R||r<L)return0; 37if(l>=L&&r<=R)return sum[u]; 38 pd(u); 39return qrysum(L,R,ls,l,mid)+qrysum(L,R,rs,mid+1,r); 40} 41void build(ll u=1,ll l=1,ll r=n) { 42 lz[u]=-1; 43if(l==r) {sum[u]=mx[u]=a[l],se[u]=~inf,nmx[u]=1; return;} 44 build(ls,l,mid),build(rs,mid+1,r),pu(u); 45} 46int main() { 47 ll T; 48for(scanf("%lld",&T); T--;) { 49 scanf("%lld%lld",&n,&m); 50for(ll i=1; i<=n; ++i)scanf("%lld",&a[i]); 51 build(); 52while(m--) { 53 ll f,l,r,x; 54 scanf("%lld%lld%lld",&f,&l,&r); 55if(f==0)scanf("%lld",&x),upd(l,r,x); 56elseif(f==1)printf("%lld\n",qrymx(l,r)); 57elseif(f==2)printf("%lld\n",qrysum(l,r)); 58 } 59 } 60return0; 61 }
原文:https://www.cnblogs.com/asdfsag/p/10776040.html
内容总结
以上是互联网集市为您收集整理的HDU - 5306 Gorgeous Sequence (吉司机线段树)全部内容,希望文章能够帮你解决HDU - 5306 Gorgeous Sequence (吉司机线段树)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。