您的位置:首页 > 其它

线段树练习 2(线段树是个啥玩意啊,还是个大师的题,我感觉青铜都不到)

2015-02-12 20:36 330 查看
题目地址:http://codevs.cn/problem/1081/

题目描述 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<iostream>

#include<stdio.h>

#include<algorithm>

#include<string>

using namespace std;

int main()

{

int a[9999] = { 0 };

int n;

cin >> n;

for (int i = 1; i <=n; i++)

{

cin >> a[i];

}

int q;

int b, c,d, x;

cin >> q;

for (int i = 0; i < q; i++)

{

cin >> x;

if (x==1)

{

cin >> b >> c >> d;

for (int i = b; i <=c; i++)

{

a[i] = a[i] + d;

}

}

else

{

int ni;

cin >> ni;

cout << a[ni] << endl;

}

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: