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 ...
随机推荐
- jQuery Moblie 学习之page、button、theme、panel、listview、controlgroup、navbar等(一)
1.jQTouch jQTouch与jQuery Moblie十分相似,也是一个jQuery插件,同样也支持HTML页面标签驱动,实现移动设备视图切换效果.不同的是它是专为WebKit内核的浏览器打造 ...
- select count(*)和select count(1)哪个性能高
select count(*).count(数字).count(字段名)在相同的条件下是没有性能差别的,一般我们在统计行数的时候都会把NULL值统计在内的,所以这样的话,最好就是使用COUNT(*) ...
- 【JAVA之泛型】
一.引例. 1.引例. 假设现在有一个ArrayList的容器,如果不使用泛型约束,则可以向容器中加入各种类型的对象,但是如果取出来的时候只是用一种类型的转换则肯定会抛出ClassCastExcept ...
- 【PHP构造方法和析构方法的使用】
构造方法:__construct,析构方法:__destruct 代码示例: <?php class Person { public $name; public $age; public fun ...
- java中文乱码解决方法汇总
public static void main(String[] argv){ try { System.out.println(“中文”);//1 ...
- 攻城狮在路上(叁)Linux(二十)--- Linux磁盘格式化
磁盘完成分区之后,进行格式化,生成文件系统. 命令格式: mkfs [-t 文件系统格式] 设备文件名 <== 使用 mkfs [Tab][Tab] 可以查看linux支持的文件系统格式 示例 ...
- struts拦截器实现原理
图1: 上1来源于Struts2官方站点,是Struts 2 的整体结构. 一个请求在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请 ...
- centos(x86 64位系统)使用boost
1. 安装gcc,g++,make等开发环境 yum groupinstall "Development Tools" 2. 安装boost yum install boost b ...
- .NET NLog 详解(五) - Condition Expression
Sample <!-- during normal execution only log Info messages --> <defaultFilter>level > ...
- hdu 3236 二维背包
明天来一发 hdu 4501 算是这题的简化版吧