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 |
---|---|
3 |
3 |
代码 树状数组
#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 ...
随机推荐
- 《C#本质论》读书笔记(12)委托和Lambda表达式
12.1.委托概述 12.1.2 委托的数据类型 为了减少重复代码数量,可以将比较方法作为参数传递给 BubbleSort()方法.此外,为了将方法作为参数传递,必须有一个能够标识方法的数据类型--也 ...
- 数据结构和算法 – 4.字符串、 String 类和 StringBuilder 类
4.1.String类的应用 class String类应用 { static void Main(string[] args) { string astring = "Now is The ...
- 基于Bootstrap简单实用的tags标签插件
http://www.htmleaf.com/jQuery/ jQuery之家 自由分享jQuery.html5和css3的插件库 基于Bootstrap简单实用的tags标签插件
- Yii 同域名的单点登录 SSO实现
SSO (Single Sign-on) 顾名思义就是几个子项目共用一个登录点. 原理简单来说就是服务端session 共享, 客户端跨域cookies. 实现非常简单,protected/confi ...
- [LeetCode] Largest Rectangle in Histogram
Given n non-negative integers representing the histogram's bar height where the width of each bar is ...
- 解决oracle11g 空表不能exp导出的问题
在使用exp备份数据库,然后使用imp导入的时候出现了好多表或者视图不存在的错误信息. 究其原因,是11G中增加了一个新的特性:数据条数是0时不分配segment,所以就不能被导出. 解决思路:就是向 ...
- MyEclipse 选中右侧编辑的文件时自动展开左侧目录树
- hdu 4274 2012长春赛区网络赛 树形dp ***
设定每个节点的上限和下限,之后向上更新,判断是否出现矛盾 #include<cstdio> #include<iostream> #include<algorithm&g ...
- 用PowerShell脚本实现对SharePoint页面Title的修改
存在这样一种情况,对应的page已经部署到product的SharePoint环境中,那么在部署下一个版本的时候就不允许把已经创建好的page删除再创建,因此page中修改过的属性就不能再次部署到Sh ...
- Linux学习笔记(16)shell基础之Bash变量
1. 用户自定义变量 (1)变量设置规则 ① 变量名称可由字母.数字和下划线组成,但不能以数字开头: ② 变量的默认类型为字符串类型,如果要对数值运算,则必须指定变量类型为数值型: ③ 变量用等号连接 ...