bzoj 3038 线段树
来源:互联网 发布:net程序员是干嘛的 编辑:程序博客网 时间:2024/06/13 07:59
维护一个标记,当值为0或1时便不用修改
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++) #define fod(i,a,b) for(int i=a;i>=b;i--)using namespace std;typedef long long ll;const int N=1e5+10;int n,m;ll a[N];struct Node{int l,r,tag;ll sum;}tr[N<<2];void build(int x,int l,int r){ tr[x].l=l; tr[x].r=r; tr[x].sum=tr[x].tag=0; if(l==r) {tr[x].sum=a[l]; if(a[l]==1||a[l]==0) tr[x].tag=1;return ;} int mid=(l+r)>>1; build(x<<1,l,mid); build(x<<1|1,mid+1,r); tr[x].sum=tr[x<<1].sum+tr[x<<1|1].sum; tr[x].tag=tr[x<<1].tag&tr[x<<1|1].tag;}void update(int x,int ql,int qr){ int l=tr[x].l,r=tr[x].r,mid=(l+r)>>1; if(tr[x].tag) return ; if(l==r) { tr[x].sum=floor(sqrt(tr[x].sum)); if(tr[x].sum==1||tr[x].sum==0) tr[x].tag=1; return ; } if(qr<=mid) update(x<<1,ql,qr); else if(ql>mid) update(x<<1|1,ql,qr); else { update(x<<1,ql,mid); update(x<<1|1,mid+1,qr); } tr[x].sum=tr[x<<1].sum+tr[x<<1|1].sum; tr[x].tag=tr[x<<1].tag&tr[x<<1|1].tag;} ll query(int x,int ql,int qr){ int l=tr[x].l,r=tr[x].r,mid=(l+r)>>1; if(ql==l&&r==qr) { return tr[x].sum; } if(qr<=mid) return query(x<<1,ql,qr); else if(ql>mid) return query(x<<1|1,ql,qr); else return (query(x<<1,ql,mid)+query(x<<1|1,mid+1,qr)); }int main(){ scanf("%d",&n); fo(i,1,n) scanf("%lld",&a[i]); build(1,1,n); scanf("%d",&m); for(int k,l,r,i=1;i<=m;i++) { scanf("%d%d%d",&k,&l,&r); if(l>r) swap(l,r); if(k==0) update(1,l,r); else printf("%lld\n",query(1,l,r)); } return 0;}
阅读全文
0 0
- BZOJ 3038 线段树
- bzoj 3038 线段树
- bzoj 线段树专刊
- bzoj 1798 线段树
- BZOJ 1012 线段树
- bzoj 4388 线段树
- BZOJ 1798 线段树
- BZOJ 1112 线段树
- BZOJ 3339 线段树
- bzoj 2957 线段树
- bzoj 1012 线段树
- bzoj 2752 线段树
- bzoj 3519 线段树
- bzoj 1798 线段树
- BZOJ 3110 线段树套线段树
- bzoj 2120&&2453 线段树套权值线段树
- bzoj 2141 线段树套权值线段树
- BZOJ 3123 线段树合并
- Python-二分法查找
- nginx源码分析—内存池结构ngx_pool_t及内存管理(精辟)
- Spark SQL基础学习【二】以编程方式执行Spark SQL查询
- RQNOJ 202 奥运火炬登珠峰
- Hadoop入门(八)自定义类型实例-统计手机流量数据Demo
- bzoj 3038 线段树
- eclipse中配置struts2出现There is no Action mapped for namespace [/] and action name...
- [转] Java编程中“为了性能”尽量要做到的一些地方
- 对MongoDB设计模式的理解和常用查询总结
- HDU 5969 最大的位或
- opencv亮度对比度调节
- mybatis
- Netty SSL安全配置
- css设置容器占满屏幕