/* 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的更多相关文章

  1. T1080 线段树练习 codevs

    http://codevs.cn/problem/1080/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 一行N个方 ...

  2. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  3. codevs 1080 线段树练习

    链接:http://codevs.cn/problem/1080/ 先用树状数组水一发,再用线段树水一发 树状数组代码:84ms #include<cstdio> #include< ...

  4. codevs 1080 线段树练习 CDQ分治

    codevs 1080 线段树练习 http://codevs.cn/problem/1080/  时间限制: 1 s  空间限制: 128000 KB   题目描述 Description 一行N个 ...

  5. codevs 1080 线段树练习--用树状数组做的

    1080 线段树练习  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 一行N个方格,开始每个格子里都有一个整数.现在动态 ...

  6. Codevs 1080 线段树练习(CDQ分治)

    1080 线段树练习  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 一行N个方格,开始每个格子里都有 ...

  7. codevs——1080 线段树练习

    1080 线段树练习  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 一行N个方格,开始每个格子里都有 ...

  8. Codevs 1080 线段树联系

    题目描述 Description 一行N个方格,开始每个格子里都有一个整数.现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和:修改的规则是指定某一个格子x,加上或 ...

  9. codevs 1080 线段树练习(线段树)

    题目: 题目描述 Description 一行N个方格,开始每个格子里都有一个整数.现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和:修改的规则是指定某一个格子x ...

随机推荐

  1. void (*f(int, void (*)(int)))(int) 函数解析

    函数指针 今天与几个同学看到了一个函数指针定义: void (*f(int, void (*)(int)))(int) 以前在C trap pit fails里面见过,但是文章里面介绍的很详细,但是往 ...

  2. Selinux 禁用

    Selinux是对于强制访问控制的实现,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件. 对于新手来说会影响我们的操作.一般情况下是不需要的,所以禁用他,如果需要的情况下,我们可以 ...

  3. table-cell的手机应用场景

    前言 最近在前端观察看见了这篇老文章,看见了元素居中的5种办法,其中提到了display:table-cell这个css显示的新属性,按照当时的浏览器市场来说想必兼容性会是糟糕的一比,但是现在这坛老酒 ...

  4. PyQt4环境搭建与使用

    初次使用python写图形界面的工具时,用了Tkinter.wxpython,都是需要手写界面布局的,看api看的头疼觉得这样写太费劲了,于是搜了下看看别人都是怎样写python图形界面的. 在论坛上 ...

  5. fgets和scanf的区别

    fgets和scanf的区别 1.测试使用scanf的一个例子: #include "stdio.h" #include "string.h" int main ...

  6. word2vec的艰难成长史

    1.首先在网站上面下载gensim,我是在11服务器上面下载的 2.使用winpython打开 3.在command windows 下使用pip install gensim这句话进行,原先使用这句 ...

  7. get top k elements of the same key in hive

    key points: 1. group by key and sort by using distribute by and sort by. 2. get top k elements by a ...

  8. MongoDB再实测

    不用安装,直接解压.. 这些都不是最主要的,,,倒是TOMCAT和NGINX还需要更深入的了解... http://jingyan.baidu.com/article/acf728fd3d398bf8 ...

  9. NGINX的CORS--跨域访问配置

    阻止交叉源访问问题. 网上可搜N多,解决办法都差不多,其中一种: add_header Access-Control-Allow-Origin http://xxxx:port; add_header ...

  10. Keil伪指令

    Keil伪指令 目录 Keil伪指令... 1.     ALTNAME. 2 2.     BIT. 2 3.     BSEG.. 2 4.     CODE. 2 5.     CSEG.. 2 ...