3038: 上帝造题的七分钟2 线段树+剪枝
来源:互联网 发布:淘宝大连博哲贸易 假货 编辑:程序博客网 时间:2024/04/25 09:52
一维的区间修改+区间查询,显然可以用线段树来做。
裸的线段树会超时,因为每次开方都要递归到底……(开始将开方的和写成了和的开方QAQ)
剪枝就是对于一个数如果是1或0,那么之后无需再对其进行操作,因为开方不会影响这个数值。
#include<bits/stdc++.h>#define N 400005#define ll long long using namespace std;int n,m;int l[N],r[N];ll sum[N],a[N>>2];bool flag[N];inline ll read(){ ll a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f;}inline void pushup(int k){ sum[k]=sum[k<<1]+sum[k<<1|1]; flag[k]=flag[k<<1]&flag[k<<1|1];}void build(int k,int x,int y){ l[k]=x; r[k]=y; if (l[k]==r[k]) { sum[k]=a[l[k]]; if (sum[k]==0||sum[k]==1) flag[k]=1; return; } int mid=l[k]+r[k]>>1; build(k<<1,x,mid); build(k<<1|1,mid+1,y); pushup(k);}void change(int k,int x,int y){ if (flag[k]) return; if (l[k]==r[k]) { sum[k]=(ll)sqrt(sum[k]); if (sum[k]==0||sum[k]==1) flag[k]=1; return; } int mid=l[k]+r[k]>>1; if (y<=mid) change(k<<1,x,y); else if (x>mid) change(k<<1|1,x,y); else change(k<<1,x,mid),change(k<<1|1,mid+1,y); pushup(k);}ll query(int k,int x,int y){ if (x<=l[k]&&r[k]<=y) return sum[k]; int mid=l[k]+r[k]>>1; if (y<=mid) return query(k<<1,x,y); else if (x>mid) return query(k<<1|1,x,y); else return query(k<<1,x,mid)+query(k<<1|1,mid+1,y);}int main(){ n=read(); for (int i=1;i<=n;i++) a[i]=read(); build(1,1,n); m=read(); for (int i=1;i<=m;i++) { int opt=read(),l=read(),r=read(); if (l>r) swap(l,r); if (opt==0) change(1,l,r); else printf("%lld\n",query(1,l,r)); } return 0;}
0 0
- 3038: 上帝造题的七分钟2 线段树+剪枝
- [BZOJ3038][线段树]上帝造题的七分钟2
- 【bzoj3038】上帝造题的七分钟2 线段树
- 上帝造题的七分钟2(线段树)
- 并查集+线段树 BZOJ 3038: 上帝造题的七分钟2
- [BZOJ3211&3038][上帝造题的七分钟2&花神游历各国][线段树]
- bzoj 3038 上帝造题的七分钟2 (线段树)
- 【codevs2492】【Tyvj1941】上帝造题的七分钟2,线段树的特别技巧
- 【bzoj3038】上帝造题的七分钟2 线段树+暴力
- [BZOJ3038]上帝造题的七分钟2(线段树)
- codevs 2492 上帝造题的七分钟 2(线段树)
- Codevs 2492 上帝造题的七分钟 2(线段树)
- bzoj3038 上帝造题的七分钟2(线段树区间开方统计和)
- BZOJ 3038: 上帝造题的七分钟2
- bzoj 3038: 上帝造题的七分钟2
- BZOJ 3038 上帝造题的七分钟2
- bzoj 3038 上帝造题的七分钟2
- BZOJ 3038 上帝造题的七分钟2
- 两种引用外部CSS文件的方法
- CentOS_1_安装
- 【杭电oj】1863 - 畅通工程(最小生成树,模版)
- 3132: 上帝造题的七分钟 树状数组 二维区间加减+查询
- iOS - 内存管理
- 3038: 上帝造题的七分钟2 线段树+剪枝
- GYP学习
- 工信部发布2015年中国软件业务收入"百强"发展报告(zz)
- ardupilot 的makefile路径
- python学习之路(1)
- Git Stash用法
- hadoop2.6与hbase1.1.2单机版安装配置
- 1047: [HAOI2007]理想的正方形 二维单调队列维护最值
- hadoop2集群搭建