uestc 1073 秋实大哥与线段树 Label:线段树
秋实大哥与线段树
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
“学习本无底,前进莫徬徨。” 秋实大哥对一旁玩手机的学弟说道。
秋实大哥是一个爱学习的人,今天他刚刚学习了线段树这个数据结构。
为了检验自己的掌握程度,秋实大哥给自己出了一个题,同时邀请大家一起来作。
秋实大哥的题目要求你维护一个序列,支持两种操作:一种是修改某一个元素的值;一种是询问一段区间的和。
Input
第一行包含一个整数nn,表示序列的长度。
接下来一行包含nn个整数aiai,表示序列初始的元素。
接下来一行包含一个整数mm,表示操作数。
接下来mm行,每行是以下两种操作之一:
- 1 x v : 表示将第x个元素的值改为v
- 2 l r : 表示询问[l,r]这个区间的元素和
1≤n,m,v,ai≤1000001≤n,m,v,ai≤100000,1≤l≤r≤n1≤l≤r≤n。
Output
对于每一个22 ll rr操作,输出一个整数占一行,表示对应的答案。
Sample input and output
Sample Input | Sample Output |
---|---|
|
|
代码 树状数组
- #include<iostream>
- #include<algorithm>
- #include<cstdio>
- #include<cstring>
- #define ll long long
- using namespace std;
- ll bit[],a[];
- ll n,m;
- ll sum(ll i){//求元素1~i的和
- ll s=;
- while(i>){
- s+=bit[i];
- i-=i&(-i);
- }
- return s;
- }
- void add(ll i,ll x){//将元素i加上x
- while(i<=n){
- bit[i]+=x;
- i+=i&(-i);
- }
- }
- int main(){
- scanf("%lld",&n);
- for(int i=;i<=n;i++){
- scanf("%d",&a[i]);
- add(i,a[i]);
- }
- scanf("%lld",&m);
- for(int i=;i<=m;i++){
- ll x=,b=,c=;
- scanf("%lld%lld%lld",&x,&b,&c);
- if(x==){
- ll temp=c-a[b];//处理修改后的数与原数的差
- a[b]=c;
- add(b,temp);
- }
- else if(x==){
- ll temp=sum(c)-sum(b-);
- printf("%lld\n",temp);
- }
- }
- return ;
- }
用的树状数组,注意变量名要起好,像Line41我就直接写成了
- add(x,temp);
果断WA
还有Line40,没写,思考一下就知道,可能对一个值多次修改,然后Orz
代码 zkw线段树
- #include<iostream>
- #include<cstring>
- #include<cstdio>
- #include<algorithm>
- #define ll long long
- using namespace std;
- ll tr[];//记得改long long
- ll n,temp,M,m;
- void query(ll s,ll t){
- ll ans=;
- for(s=s+M-,t=t+M+;s^t^;s>>=,t>>=){
- if(~s&) ans+=tr[s^];
- if(t&) ans+=tr[t^];
- }
- printf("%lld\n",ans);
- }
- void change(ll x,ll y){
- for(tr[x+=M]+=y,x>>=;x>;x>>=){
- tr[x]=tr[x<<]+tr[x<<|];
- }
- }
- int main(){
- // freopen("01.in","r",stdin);
- scanf("%lld",&n);
- for(M=;M<(n+);M<<=);//定义M大小
- for(ll i=;i<=n;i++){
- scanf("%lld",&temp);
- change(i,temp);
- }
- scanf("%lld",&m);
- for(ll i=;i<=m;i++){
- ll oper,s,t;
- scanf("%lld%lld%lld",&oper,&s,&t);
- if(oper==){
- query(s,t);
- }
- else if(oper==){
- temp=t-tr[s+M];
- change(s,temp);
- }
- }
- return ;
- }
Line 22
- x>>=1
一定要写
还有就是Line 30之前放到Line 36,诡异的错误
uestc 1073 秋实大哥与线段树 Label:线段树的更多相关文章
- UESTC 1061 秋实大哥与战争 线段树区间合并
秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 男儿何不带吴钩, ...
- UESTC - 1057 秋实大哥与花 线段树
题意 秋实大哥是一个儒雅之人,昼听笙歌夜醉眠,若非月下即花前. 所以秋实大哥精心照料了很多花朵.现在所有的花朵排成了一行,每朵花有一个愉悦值. 秋实大哥每天要对着某一段连续的花朵歌唱,然后这些花朵的愉 ...
- UESTC 1059 - 秋实大哥与小朋友
题目链接:http://acm.uestc.edu.cn/#/problem/show/1059 Time Limit: 3000/1000MS (Java/Others) Memory Li ...
- UESTC 1074 秋实大哥搞算数 栈模拟
秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- UESTC - 1057 秋实大哥与花 线段树模板题
http://acm.uestc.edu.cn/#/problem/show/1057 题意:给你n个数,q次操作,每次在l,r上加上x并输出此区间的sum 题解:线段树模板, #define _CR ...
- uestc poj2559 秋实大哥去打工
//感觉有必要把这题放博客上待复习 刚刚写解题报告的时候发现自己又不会做这题了 //我不会告诉你这题绝对是命题人抄poj2559 这题使用一个单调递增的栈,栈内存储的元素有两个值,一个高度,一个长度. ...
- 2015 UESTC 数据结构专题E题 秋实大哥与家 线段树扫描线求矩形面积交
E - 秋实大哥与家 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 De ...
- 2015 UESTC 数据结构专题D题 秋实大哥与战争 变化版本的线段树,合并区间,单点查询
D - 秋实大哥与战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 D ...
- UESTC_秋实大哥与线段树 2015 UESTC Training for Data Structures<Problem M>
M - 秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Sub ...
随机推荐
- 玩玩Excel下的Power View
作为微软平台下的数据展示工具,Power View是一个不错的选择.而在Excel 2013下,即使你没有SharePoint的实例那么你也可以玩转它.此篇讲对Excel 2013下的Power Vi ...
- [SVN] SVN在Eclipse里的各个状态解释
中文意义: A代表添加D代表删除U代表更新C代表合并,并且合并中有冲突G代表合并,合并中没有冲突 每个字母代表的意义: U = item (U)pdated to repository version ...
- 在linux配置NFS用于RAC的搭建
rac的共享存储有很多种搭建方式,nfs是其中一种.生产环境一般不采用nfs,多用于测试. nfs搭建步骤大致分为如下: 1.划盘 给节点1挂载一块磁盘,并将磁盘分区,并格式化,再挂载 [root@n ...
- 搭建Mantis 缺陷管理系统(转)
转自 什么是Mantis MantisBT is a free popular web-based bugtracking system (feature list). It is written i ...
- SSH框架应用解析
一.什么是SSH SSH 不仅仅只是一个框架,而是由多个框架集成而来,是 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架,结构清晰.可复用性好. ...
- android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位
android 获取文件夹.文件的大小 以B.KB.MB.GB 为单位 public class FileSizeUtil { public static final int SIZETYPE_B ...
- hdu1010 dfs+奇偶性减枝
Tempter of the Bone Problem Description The doggie found a bone in an ancient maze, which fascinated ...
- [技术学习]js接口继承
js是面向对象语言,但是js又缺乏了面向对象的诸多特性,比如继承,没有接口继承也没有父类继承,因此有时候需要人工来实现继承. 一.首先看下java中面向对象的继承: //定义类鸟类的飞行动作 inte ...
- Scau 8633 回文划分 mancher + dp
时间限制:1000MS 内存限制:1000K 提交次数: 通过次数: 题型: 编程题 语言: G++;GCC Description 我们说一个字符串是回文串,那么意味着这个串从两边读起来的字母都是一 ...
- 4、delphi record数组复制
SetLength(OldDeptInfo,0); //释放旧数组 OldDeptInfo:=nil; 这样也可以: //SetLength(OldDeptInfo,Length(NewDeptInf ...