线段树练习 codevs 1080
/* codevs 1080 线段树练习
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
题解
查看运行结果
题目描述 Description
一行N个方格,开始每个格子里都有一个整数。现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和;修改的规则是指定某一个格子x,加上或者减去一个特定的值A。现在要求你能对每个提问作出正确的回答。1≤N<100000,,提问和修改的总数m<10000条。 输入描述 Input Description
输入文件第一行为一个整数N,接下来是n行n个整数,表示格子中原来的整数。接下一个正整数m,再接下来有m行,表示m个询问,第一个整数表示询问代号,询问代号1表示增加,后面的两个数x和A表示给位置X上的数值增加A,询问代号2表示区间求和,后面两个整数表示a和b,表示要求[a,b]之间的区间和。 输出描述 Output Description
共m行,每个整数 样例输入 Sample Input
6 4 5 6 2 1 3 4 1 3 5 2 1 4 1 1 9 2 2 6 样例输出 Sample Output
22 22 数据范围及提示 Data Size & Hint
1≤N≤100000, m≤10000 。
*/
#include<cstdio>
int tot=0;
const int maxn=100010;
int a[100010]={0};
struct treetype
{
int left,right;
int lptr,rptr;
int sum;
}t[2*maxn];
void buildtree(int ll,int rr)
{
int cur=++tot;
t[cur].left=ll;
t[cur].right=rr;
if (ll!=rr-1)
{
t[cur].lptr=tot+1;
buildtree(ll,(ll+rr)/2);
t[cur].rptr=tot+1;
buildtree((ll+rr)/2,rr);
t[cur].sum=t[t[cur].lptr].sum+t[t[cur].rptr].sum;
}
else
t[cur].sum=a[ll];
}
void change(int k,int p,int tb)
{
if (t[k].left==t[k].right-1)
t[k].sum+=tb;
else
{
if (p<(t[k].left+t[k].right)/2)
change(t[k].lptr,p,tb);
if (p>=(t[k].left+t[k].right)/2)
change(t[k].rptr,p,tb);
t[k].sum=t[t[k].lptr].sum+t[t[k].rptr].sum;
}
}
int qwer(int k,int p,int tb)
{
if (p<=t[k].left&&tb>=t[k].right)
return t[k].sum;
int ans=0;
if (p<(t[k].left+t[k].right)/2)
ans+=qwer(t[k].lptr,p,tb);
if (tb>(t[k].left+t[k].right)/2)
ans+=qwer(t[k].rptr,p,tb);
return ans;
}
int main()
{
int n,m,at,p,k;
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
buildtree(1,n+1);
scanf("%d",&m);
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&at,&p,&k);
if (at==1)
change(1,p,k);
if (at==2)
printf("%d\n",qwer(1,p,k+1));
}
return 0;
}
线段树练习 codevs 1080的更多相关文章
- T1080 线段树练习 codevs
http://codevs.cn/problem/1080/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 一行N个方 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1080 线段树练习
链接:http://codevs.cn/problem/1080/ 先用树状数组水一发,再用线段树水一发 树状数组代码:84ms #include<cstdio> #include< ...
- codevs 1080 线段树练习 CDQ分治
codevs 1080 线段树练习 http://codevs.cn/problem/1080/ 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 一行N个 ...
- codevs 1080 线段树练习--用树状数组做的
1080 线段树练习 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 一行N个方格,开始每个格子里都有一个整数.现在动态 ...
- Codevs 1080 线段树练习(CDQ分治)
1080 线段树练习 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 一行N个方格,开始每个格子里都有 ...
- codevs——1080 线段树练习
1080 线段树练习 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 一行N个方格,开始每个格子里都有 ...
- Codevs 1080 线段树联系
题目描述 Description 一行N个方格,开始每个格子里都有一个整数.现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和:修改的规则是指定某一个格子x,加上或 ...
- codevs 1080 线段树练习(线段树)
题目: 题目描述 Description 一行N个方格,开始每个格子里都有一个整数.现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和:修改的规则是指定某一个格子x ...
随机推荐
- Guava API学习之Optional 判断对象是否为null
java.lang.NullPointerException,只要敢自称Java程序员,那对这个异常就再熟悉不过了.为了防止抛出这个异常,我们经常会写出这样的代码: Person person = p ...
- [Mugeda HTML5技术教程之3] Hello World: 第一个Mugeda动画
今天我们开始我们的第一个Mugeda动画作品,并通过它来看看制作Mugeda动画的一些通用流程.在开始制作之前,请确保你已经拥有一个Mugeda网站的账号.如果还没有,你可以登录 www.mugeda ...
- Backbone的 listenTo 和 on
使用情景区别 listenTo用于监听自身意外的对象 on用于监听自身 listenTo和on中的回调函数里的this的区别 listener.listenTo(object, 'eventName' ...
- php 之 PDO数据访问抽象层(0513)
PDO(PHP Data Objects)是一种在PHP里连接数据库的使用接口. PDO与mysqli曾经被建议用来取代原本PHP在用的mysql相关函数, 基于数据库使用的安全性,因为后者欠缺对于S ...
- Lua 学习笔记(二)
七.再论lua函数 1.lua中的函数被认为是带有词法定界和第一类值 a.词法定界:被嵌套的函数可以访问外部函数的变量 b.第一类值: lua中的函数可以放在变量中 (函数指针?) ...
- C语言初学 if-else语句判别在ASCII值中小于32的可控制符的类型
#include<stdio.h> main() { char c; printf("输入一个符号\n"); c=getchar(); if(c<32) prin ...
- Python学习笔记整理(十七)异常处理
一.异常基础 try/except:捕捉由代码中的异常并恢复,匹配except里面的错误,并自行except中定义的代码,后继续执行程序(发生异常后,由except捕捉到异常后,不会中断程序,继续执行 ...
- Mysql 新建用户以及授权远程连接操作
1:以root身份登陆mysql终端 mysql -uroot -pmysql 2:创建wx用户,注意密码要加单引号 mysql> create user wx identified by 'w ...
- MySQL 学习笔记 (limit offset)
select * from table limit (10000,10);这样是很慢的,因为要定位 比较快的写法是 select * from table where id >=(select ...
- 子查询有OR无法展开,改写成union
SELECT A.* FROM (SELECT CD.*, nvl(CV.SUM_CI_BALANCE, 0) as SUM_CI_BALANCE, ...