博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2016.4.10 线段树练习
阅读量:5012 次
发布时间:2019-06-12

本文共 1885 字,大约阅读时间需要 6 分钟。

1.codevs 1081 线段树练习 2

1081 线段树练习 2

 时间限制: 1 s

 空间限制: 128000 KB
 题目等级 : 大师 Master
题目描述 
Description

给你N个数,有两种操作

1:给区间[a,b]的所有数都增加X

2:询问第i个数是什么?

输入描述 
Input Description

第一行一个正整数n,接下来n行n个整数,再接下来一个正整数Q,表示操作的个数. 接下来Q行每行若干个整数。如果第一个数是1,后接3个正整数a,b,X,表示在区间[a,b]内每个数增加X,如果是2,后面跟1个整数i, 表示询问第i个位置的数是多少。

输出描述 
Output Description

对于每个询问输出一行一个答案

样例输入 
Sample Input

3

1

2

3

2

1 2 3 2

2 3

样例输出 
Sample Output

5

数据范围及提示 
Data Size & Hint

数据范围

1<=n<=100000

1<=q<=100000

分析:虽然还是已经做过的题,但是这一次是用数组写的,之前都是用指针写的。

#include
using namespace std;#include
#include
struct Tree{ int l,r; long long int sum;};Tree tree[100000*2+100];int n,m;int w[100001];void input(){ scanf("%d",&n); for(int i=1;i<=n;++i) { int x; scanf("%d",&x); w[i]=w[i-1]+x; }}void add(int i,int l,int r,int x){ if(l<=tree[i].l&&tree[i].r<=r) { tree[i].sum+=(tree[i].r-tree[i].l+1)*x; } if(tree[i].l==tree[i].r) return ; int mid=(tree[i].l+tree[i].r)/2; if(l<=mid) add(i*2,l,r,x); if(r>mid) add(i*2+1,l,r,x);}int query(int i,int k){ if(tree[i].l==tree[i].r) return tree[i].sum; int mid=(tree[i].l+tree[i].r)/2; if(k<=mid) return query(i*2,k); if(k>mid) return query(i*2+1,k); }void build(int i,int l,int r){ tree[i].l=l;tree[i].r=r; tree[i].sum=w[r]-w[l-1]; if(l==r) return ; int mid=(l+r)/2; build(i*2,l,mid); build(i*2+1,mid+1,r);}int main(){ input(); build(1,1,n); scanf("%d",&m); int x,y,z; int pp; for(int i=1;i<=m;++i) { scanf("%d",&pp); if(pp==1) { scanf("%d%d%d",&x,&y,&z); add(1,x,y,z); } else { scanf("%d",&x); printf("%d\n",query(1,x)); } } return 0;}
View Code

 2.

转载于:https://www.cnblogs.com/c1299401227/p/5375322.html

你可能感兴趣的文章
信息建模
查看>>
Mybatis 数据库物理分页插件 PageHelper
查看>>
虚函数、纯虚函数详解
查看>>
z-stack中数据的发送,广播、组播、点对点
查看>>
Practial Vim 学习笔记一
查看>>
.NET中使用js实现百度搜索下拉提示效果[不是局部刷新,呜呜。。]
查看>>
MySQL - 常用命令及常用查询SQL
查看>>
C# .NET MVC 接收 JSON ,POST,WCF 无缝隙切换
查看>>
android获取USB设备的名称
查看>>
JavaPersistenceWithHibernate第二版笔记-第七章-005排序的集合(@org.hibernate.annotations.SortComparator)...
查看>>
ue4同c#通信时的中文乱码问题
查看>>
mvc性能优化
查看>>
log
查看>>
JDBC 第九课 —— 初次接触 JUnit
查看>>
浏览器加载、解析、渲染的过程
查看>>
开放api接口签名验证
查看>>
sed 常用操作纪实
查看>>
C++复习:对C的拓展
查看>>
校外实习报告(九)
查看>>
android之android.intent.category.DEFAULT的用途和使用
查看>>