/* 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. C++程序设计的技巧-Pimple的使用

    1.Pimpl概念 在进行项目开发中可能遇到的问题,程序编译耗时很长,每一次简单修改接口之后项目都会被完全重新编译,浪费了很多时间.这个机制是Private Implementation的缩写,顾明思 ...

  2. uva 469 - Wetlands of Florida

    题目:给你一个矩阵和某些点,找到给的点所处连续的W区域的面积(八个方向). 分析:搜索.floodfill算法,利用搜索直接求解就可以了. 说明:注意读入数据的格式. #include <cst ...

  3. JS通用表单验证函数,基于javascript正则表达式

    表单的验证在实际的开发当中是件很烦琐又无趣的事情今天在做一个小项目的时候,需要JS验证,寻找到一个比较好的东西 地址如下: http://blog.csdn.net/goodfunman/archiv ...

  4. OC 冒泡排序 -- 核心代码

    //冒泡 核心代码 for (int i = 0; i < array.count - 1; i++) { int a = [array[i] intValue]; for (int j = i ...

  5. QT打开网页 QURL

    用QT打开一个网页就是先定义一个QUrl对象url,然后利用QDesktopServices::open(url)即可. 例如: const QUrl url(http://www.baidu.com ...

  6. Altium Designer规则

    1.PCB规则 是PCB设计中至关重要的一个环节:保证PCB符合电气要求.机械加工(精度)要求:为自动布局.布线和部分手动布局.布线操作提供依据 为规则检查提供依据,PCB编辑期间,AD会实时地进行一 ...

  7. 关于栈和堆的定量分析(★firecat推荐★)

    文章来源:http://blog.csdn.net/bigbug_zju/article/details/39525281 计算机系统中的堆和栈是跟程序员最密切的两个概念.如果没有栈和堆的概念,下面程 ...

  8. MySQL常用Json函数

    官方文档:JSON Functions Name Description JSON_APPEND() Append data to JSON document JSON_ARRAY() Create ...

  9. python 执行shell命令

    1.os模块中的os.system()这个函数来执行shell命令 1 2 3 >>> os.system('ls') anaconda-ks.cfg  install.log  i ...

  10. Visio 下载,及密钥

    Visio2010简体中文高级版(永久激活密钥:GR24B-GC2XY-KRXRG-2TRJJ-4X7DC) ed2k://|file|cn_visio_2010_x64_516562.exe|515 ...