1080 线段树练习(http://codevs.cn/problem/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>
const int maxn=100001;
int a[maxn],cur=0;
struct treetype
{int left,right;int lptr,rptr;int sum;
}tree[2*maxn];void buildtree(int ll,int rr)
{int tot=++cur;tree[tot].left=ll;tree[tot].right=rr;if (ll!=rr-1){tree[tot].lptr=cur+1;//记录左右儿子的编号(位置) buildtree(ll,(ll+rr)/2);tree[tot].rptr=cur+1;buildtree((ll+rr)/2,rr);tree[tot].sum=tree[tree[tot].lptr].sum+tree[tree[tot].rptr].sum;}else tree[tot].sum=a[ll];
}void  change(int k,int c,int delta)
{if (tree[k].left==tree[k].right-1)tree[k].sum+=delta;else {if (c<(tree[k].left+tree[k].right)/2)change(tree[k].lptr,c,delta);if (c>=(tree[k].left+tree[k].right)/2)change(tree[k].rptr,c,delta);tree[k].sum=tree[tree[k].lptr].sum+tree[tree[k].rptr].sum;}
}int  query(int k,int ll,int rr)
{if (ll<=tree[k].left&&rr>=tree[k].right) return tree[k].sum;int ans=0;//在函数内部定义,防止搜索下一层时,丢掉了上一层的值,相当于每一层重新定义一个新变量if (ll<(tree[k].left+tree[k].right)/2) ans+=query(tree[k].lptr,ll,rr);if (rr>(tree[k].left+tree[k].right)/2) ans+=query(tree[k].rptr,ll,rr);return ans;
}int main()
{int n;scanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d",&a[i]);buildtree(1,n+1);scanf("%d",&n);for (int i=1;i<=n;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);if (x==1)  change(1,y,z);if (x==2)  printf("%d\n",query(1,y,z+1));}return 0;
}

转载于:https://www.cnblogs.com/sjymj/p/5194297.html

codevs1080线段树练习相关推荐

  1. 二逼平衡树——树套树(线段树套Splay平衡树)

    题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...

  2. 线段树——HDU - 1698

    题目含义 就是初始化一堆数为1 可以经过操作把一个区间的数都改变 并求这堆数的总大小 题目分析 有一个 #include<iostream> #include<stdio.h> ...

  3. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  4. 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横

    不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...

  5. [bzoj1582][Usaco2009 Hol]Holiday Painting 节日画画_线段树

    Holiday Painting 节日画画 bzoj-1582 Usaco-2009 Hol 题目大意:给定两个n*m的01网格图.q次操作,每次将第二个网格图的子矩阵全部变成0或1,问每一次操作后两 ...

  6. codefores 786B. Legacy(最短路,线段树优化拆点,好题)

    题目链接 B. Legacy time limit per test2 seconds memory limit per test256 megabytes inputstandard input o ...

  7. 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树

    题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...

  8. 树链剖分+线段树 HDOJ 4897 Little Devil I(小恶魔)

    题目链接 题意: 给定一棵树,每条边有黑白两种颜色,初始都是白色,现在有三种操作: 1 u v:u到v路径(最短)上的边都取成相反的颜色 2 u v:u到v路径上相邻的边都取成相反的颜色(相邻即仅有一 ...

  9. bzoj1095: [ZJOI2007]Hide 捉迷藏 线段树维护括号序列 点分治 链分治

    这题真是十分难写啊 不管是点分治还是括号序列都有一堆细节.. 点分治:时空复杂度$O(n\log^2n)$,常数巨大 主要就是3个堆的初始状态 C堆:每个节点一个,为子树中的点到它父亲的距离的堆. B ...

最新文章

  1. 招聘|腾讯机器人实验室语义视觉方向(实习+社招)
  2. 计算路由汇总的方法(CIDR)
  3. Ubuntu安装google拼音输入法
  4. CodeForces 811B Vladik and Complicated Book
  5. Vue指令篇_v-bind
  6. cnn卷积神经网络应用_卷积神经网络(CNN):应用的核心概念
  7. Android One和Android Go有什么区别?
  8. EF Core:一统SQL和NoSQL数据库
  9. Perl中的正则表达式
  10. kubernetes V1.10.4 集群部署 (手动生成证书)
  11. springboot flink结果输入到hbase_Flink流处理
  12. Xshell和Xftp免费版下载安装
  13. c语言编程 要有菜单工作界面,使用C语言图形界面进行编程
  14. 8.《创业邦》:十大创业困境
  15. 构建自己企业的邮箱验证服务
  16. 概率分布函数--二项分布poisson分布
  17. Java封装e4a_E4A类库封装从入门到放弃
  18. 高通ims架构android,深度揭密高通4/5G移动基带消息系统和状态机
  19. Word使用中遇到的一些错误与解决办法,附2016版本office的安装方法
  20. 最新 | Windows和信创终端都能顺滑使用宁盾802.1X账密认证了

热门文章

  1. Bootstrap 基础五表格
  2. mysql 简单游标
  3. POST 一张 图像的调试来认识 http post
  4. 假期要如何过才有意义
  5. SCO UNIX环境下自动增加网关的两种方法
  6. 理解一个名词:用户代理(user agent)
  7. 2004-11-28+ 认识Duwamish 7.0(3)错误处理
  8. L2-031 深入虎穴 (25 分)-PAT 团体程序设计天梯赛 GPLT
  9. 蓝桥杯 ADV-14 算法提高 卡勒沃夫之弱水路三千(提高型)
  10. python标准函数什么意思_python中quote函数是什么意思,怎么用