nefuoj 1215 线段树区间更新区间求和
来源:互联网 发布:java创建一个表格 编辑:程序博客网 时间:2024/06/08 13:24
统计序列和
Problem:1215
Time Limit:2000ms
Memory Limit:65535K
Description
给定n个数,你的任务是实现下面的两种操作,S x y把第x个数改成y(y是小于10的9次方的非负整数),M x y计算第x个数到第y个数的和
Input
多组数据,第一行为整数n(1<=n<=200000),接下来n个整数(每个整数都是小于10的9次方的非负整数),接下来有不超过200000的操作,以END结束
Output
对于每一个M操作,输出x到y的和
Sample Input
31 2 3M 1 3S 2 6M 1 3END
Sample Output
610#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;const int inf=0x3f3f3f3f;const int maxn=200010;long long num[maxn<<2],a[maxn],fans[maxn];void buildtree(int le,int ri,int node){ if(le==ri){ num[node]=a[le]; return ; } int t=(le+ri)>>1; buildtree(le,t,node<<1); buildtree(t+1,ri,node<<1|1); num[node]=num[node<<1]+num[node<<1|1];}void update(int pos,long long val,int le,int ri,int node){ if(le==ri){ num[node]=val; return ; } int t=(le+ri)>>1; if(pos<=t) update(pos,val,le,t,node<<1); else update(pos,val,t+1,ri,node<<1|1); num[node]=num[node<<1]+num[node<<1|1];}long long query(int l,int r,int le,int ri,int node){ if(l<=le&&ri<=r) return num[node]; int t=(le+ri)>>1; long long ans=0; if(l<=t) ans+=query(l,r,le,t,node<<1); if(r>t) ans+=query(l,r,t+1,ri,node<<1|1); return ans;}int main(){ int n,pos,u,v; long long val; char ch[10]; while(scanf("%d",&n)!=-1){ for(int i=1;i<=n;i++) scanf("%lld",&a[i]); buildtree(1,n,1); int k=0; while(scanf("%s",ch)){ if(ch[0]=='E') break; if(ch[0]=='S'){ scanf("%d%lld",&pos,&val); update(pos,val,1,n,1); }else{ scanf("%d%d",&u,&v); fans[k++]=query(u,v,1,n,1); } } for(int i=0;i<k;i++) printf("%lld\n",fans[i]); } return 0;}<br /><span id="_xhe_temp" width="0" height="0"><br /></span>
0 0
- nefuoj 1215 线段树区间更新区间求和
- nefuoj 1212线段树区间更新
- poj3468 线段树区间更新,区间求和
- 线段树区间更新+求和
- HDU1698(线段树区间更新求和)
- 线段树(区间更新求和)
- 线段树(单点更新,区间求和)
- 线段树 (区间更新求和)
- poj2352Stars【线段树单点更新区间求和】
- 线段树单点更新 区间求和,求最值
- leetCode_线段树、单点更新、区间求和
- 线段树,成段更新,区间求和
- HDU1166 线段树区间求和,单点更新
- HDOJ 4614 —— 线段树区间更新&区间求和
- 线段树 区间更新 区间求和以及最值
- POJ 3468 线段树 区间更新+区间求和
- Just a Hook ,线段树,区间更新 ,区间求和
- codevs 1082 线段树:区间更新,区间求和
- Ubuntu14下repo的下载及Android源码下载
- 找工作之路2
- subid和slotid
- iFun Factory的 游戏服务器
- select函数详解及实例分析
- nefuoj 1215 线段树区间更新区间求和
- TDD实践工具
- 静态表查找
- vi编辑器
- android Popupwindow软键盘与窗体重叠的解决方法
- JS String(字符串)对象 Boolean对象
- Freeline 0.8.6在Android studio中的集成
- gradle+springBoot入门示例
- java web项目获取路径问题