线段树练习 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 ...
随机推荐
- (原)torch的训练过程
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6221622.html 参考网址: http://ju.outofmemory.cn/entry/284 ...
- ECSTORE 新建APP应用
1.用命令新建app // ----- window平台 ----- 直接运行 " 站点根目录/app/base/cmd.bat " 出现命令行后输入 dev:new app my ...
- (转) Linux的capability深入分析(2)
一)capability的工具介绍 在我们的试验环境是RHEL6,libcap-2.16软件包中包含了相关的capability设置及查看工作,如下: rpm -ql libcap-2.16- ...
- 如何使用git创建项目,创建分支
git config -global user.name "Your name" git config -global user.email "you@example.c ...
- android使用BlueStacks作为模拟器
android原生的模拟器启动比较慢,偶尔还会出现一些莫名的问题,我们除了可以使用我们的android手机来进行调试外,还可以使用第三方的android模拟器,例如BlueStacks模拟器: 相对原 ...
- 《Unix环境高级编程》环境搭建
用的是第三版的安装包:src.3e.tar.gz 地址:http://www.apuebook.com/ 1.解压:$ tar -zxvf *.tar.gz 2. $ cd apue.3e/ 3. ...
- 充分发挥 JavaScript 语言的优势
尽管我在生产环境中使用 JavaScript 长达 8 年之久了,但是,直到最近 2 年,我才开始学习如何正确地编写 JavaScript 代码,根据我对人们的理解,很多开发者都有类似经历.我们有相当 ...
- phpcms:一、安装及新建模板
1.复制D:\WWW\phpcms\phpcms\templates\目录下的default文件粘贴在当前目录下,并重命名为新模板名字(youpinzhiyuan2012) 2.打开D:\WWW\ph ...
- myeclipse实现Servlet实例(3) 通过继承HttpServlet接口实现
(1) 在软件公司 90%都是通过该方法开发. //在HttpServlet 中,设计者对post 提交和 get提交分别处理 //回忆 <form action="提交给?&qu ...
- pyqt node节点1
#!/usr/bin/env python # coding: utf-8 from PyQt4.QtGui import * from PyQt4.QtCore import * rad = 5 c ...