HDU 4027 Can you answer these queries?(线段树、查询区间和及修改区间数为数的平方根)
来源:互联网 发布:java标识符是什么 编辑:程序博客网 时间:2024/06/01 09:47
题目链接:
HDU 4027 Can you answer these queries?
分析:
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;const int maxn=100010;int n,m,t,a,b,cases=0;long long ans;long long val[maxn];struct SegTree{ int left,right; long long val;}segtree[maxn<<2];void build(int left,int right,int cur){ segtree[cur].left=left; segtree[cur].right=right; if(left==right) { segtree[cur].val=val[left]; return; } int mid=(left+right)>>1; build(left,mid,cur<<1); build(mid+1,right,(cur<<1)|1); segtree[cur].val=segtree[cur<<1].val+segtree[(cur<<1)|1].val;}void update(int a,int b,int cur){ int left=segtree[cur].left; int right=segtree[cur].right; if(segtree[cur].val==right-left+1) return ;//区间所有值都是1,那么开根号后还是1,就不用更新了 if(left==right) { segtree[cur].val=(int)(sqrt(1.0*segtree[cur].val)); return ; } int mid=(left+right)>>1; if(b<=mid) update(a,b,cur<<1); else if(a>mid) update(a,b,(cur<<1)|1); else { update(a,mid,cur<<1); update(mid+1,b,(cur<<1)|1); } segtree[cur].val=segtree[cur<<1].val+segtree[(cur<<1)|1].val;}void query(int a,int b,int cur){ int left=segtree[cur].left; int right=segtree[cur].right; long long val=segtree[cur].val; if(left==a&&right==b) { ans+=val; return; } int mid=(left+right)>>1; if(b<=mid) query(a,b,cur<<1); else if(a>mid) query(a,b,(cur<<1)|1); else { query(a,mid,cur<<1); query(mid+1,b,(cur<<1)|1); }}int main(){#ifdef LOCAL freopen("in.txt","r",stdin);#endif while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) scanf("%I64d",&val[i]); build(1,n,1); scanf("%d",&m); printf("Case #%d:\n",++cases); for(int i=0;i<m;i++) { scanf("%d%d%d",&t,&a,&b); if(a>b) swap(a,b); if(t==0) update(a,b,1); else { ans=0; query(a,b,1); printf("%I64d\n",ans); } } printf("\n"); } return 0;}
0 0
- HDU 4027 Can you answer these queries?(线段树、查询区间和及修改区间数为数的平方根)
- HDU 4027 Can you answer these queries? 线段树 区间修改 区间查询
- hdu 4027 Can you answer these queries? 线段树区间修改区间查询
- HDU-4027-Can you answer these queries? (线段树,区间开平方,区间求和)
- HDU 4027 Can you answer these queries? (线段树+区间点修改)
- HDOJ 题目4027 Can you answer these queries?(线段树,区间减为平方根,区间求和)
- HDU 4027 Can you answer these queries?(线段树求区间和)
- Can you answer these queries IV(线段树区间和)
- hdu 4027 Can you answer these queries?(线段树——区间更新)(思路)
- hdu 4027Can you answer these queries?(线段树功能:平方减少,区间求和)
- [HDU 4027] Can you answer these queries? (线段树+区间开方)
- HDU 4027 Can you answer these queries? (线段树 区间更新)
- HDU 4027 Can you answer these queries? 题解(思维+线段树区间更新)
- HDU 4027 Can you answer these queries? (线段树 区间开方)
- hdu4027 Can you answer these queries? (区间修改,区间查询)
- HDU 4027 Can you answer these queries?【线段树】区间开平方,区间求和
- HDU-4027 Can you answer these queries? (线段树 区间修改 区间查询)(The 36th ACM/ICPC Asia Regional Shanghai)
- Can you answer these queries II 线段树(区间的区间更新)
- automic&nonautomic, strong&weak, assign&retain区别
- 2016.4.29.maya help.
- Java8:读取文件到一个字符串
- LeetCode 003 Longest Substring Without Repeating Characters
- oracle异常处理
- HDU 4027 Can you answer these queries?(线段树、查询区间和及修改区间数为数的平方根)
- hibernate id 生成器
- CLOSE_WAIT状态的原因与解决方法
- 24. Swap Nodes in Pairs
- 用Jenkins搭建Android自动打包环境
- linux 解决大量SYN_RECV CLOSE_WAIT
- Parameters在Oozie的hive action中的使用
- 微信平台开发环境
- [ngix]CentOS6 下nginx的安装