AOJ DSL_2_E Range Add Query (RAQ)

Range Add Query

数列 A = {a1,a2,...,an} に対し、次の2つの操作を行うプログラムを作成せよ。

  • add(s,t,x)as,as+1,...,at にxを加算する。
  • get(i)aiの値を出力する。

ただし、ai (i=1,2,...,n)は、0 で初期化されているものとする。

入力

n q
query1
query2
:
queryq

1行目にAの要素数n, クエリの数qが与えられる。続くq行に i 番目のクエリ queryi が与えられる。queryi は以下のいずれかの形式で与えられる。

0 s t x

または

1 i

各クエリの最初の数字は、クエリの種類を示し、‘0‘がadd(s,t,x)、‘1‘がget(i)を表す。

出力

getクエリについて、値を1行に出力せよ。

制約

  • 1≤n≤100000
  • 1≤q≤100000
  • 1≤stn
  • 1≤in
  • 0≤x≤1000

入力例 1

3 5
0 1 2 1
0 2 3 2
0 3 3 3
1 2
1 3

出力例 1

3
5

入力例 2

4 3
1 2
0 1 4 1
1 2

出力例 2

0
1

区间加 单点查

树状数组+差分 或 线段树

缩常数,继续打榜

 1 #include <cstdio>
 2 #include <cstdlib>
 3
 4 #define siz 10000000
 5
 6 char buf[siz], *bit = buf;
 7
 8 inline int nextInt(void) {
 9     register int ret = 0;
10     register int neg = false;
11
12     for (; *bit < ‘0‘; ++bit)
13         if (*bit == ‘-‘)neg ^= true;
14
15     for (; *bit >= ‘0‘; ++bit)
16         ret = ret * 10 + *bit - ‘0‘;
17
18     return neg ? -ret : ret;
19 }
20
21 int n, m;
22
23 int pre[100005];
24
25 inline int ask(int p) {
26     int ret = 0;
27     for (; p; p -= p&-p)
28         ret += pre[p];
29     return ret;
30 }
31
32 inline void add(int p, int k) {
33     for (; p <= n; p += p&-p)
34         pre[p] += k;
35 }
36
37 signed main(void) {
38     fread(buf, 1, siz, stdin);
39
40     n = nextInt();
41     m = nextInt();
42
43     for (int i = 1; i <= m; ++i) {
44         int c = nextInt();
45         if (c)    // get(i)
46             printf("%d\n", ask(nextInt()));
47         else    // add(s, t, x)
48         {
49             int x = nextInt();
50             int y = nextInt();
51             int k = nextInt();
52             add(x, k); add(y + 1, -k);
53         }
54     }
55
56     //system("pause");
57 }

@Author: YouSiki

时间: 2024-11-05 02:25:09

AOJ DSL_2_E Range Add Query (RAQ)的相关文章

AOJ DSL_2_A Range Minimum Query (RMQ)

Range Minimum Query (RMQ) Write a program which manipulates a sequence A = {a0,a1,...,an−1} with the following operations: find(s,t): report the mimimum element in as,as+1,...,at. update(i,x): change ai to x. Note that the initial values of ai (i=0,1

AOJ DSL_2_D Range Update Query (RUQ)

Range Update Query 数列 A = {a0,a1 ,...,an−1} に対し.次の2つの操作を行うプログラムを作成せよ. update(s,t,x): as,as+1,...,at をxに変更する. find(i): ai の値を出力する. ただし.ai (i=0,1,...,n−1)は.231-1で初期化されているものとする. 入力 n q query1 query2 : queryq 1行目にAの要素数n, クエリの数qが与えられる.続くq行にi 番目のクエリ queryi

[LeetCode] Range Sum Query 2D - Immutable

Very similar to Range Sum Query - Immutable, but we now need to compute a 2d accunulated-sum. In fact, if you work in computer vision, you may know a name for such an array --- Integral Image. To solve this problem, Stefan has already posted a very e

LeetCode:Range Sum Query - Immutable - 数组指定区间内的元素和

1.题目名称 Range Sum Query(数组指定区间内的元素和) 2.题目地址 https://leetcode.com/problems/range-sum-query-immutable/ 3.题目内容 英文:Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive. 中文:给定一个数组nums,求出索引i和j之间元素的和,i一定是小于或等于j

Range Sum Query 2D - Mutable &amp; Immutable

Range Sum Query 2D - Mutable Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper left corner (row1, col1) and lower right corner (row2, col2). The above rectangle (with the red border) is defined by (row1,

leetCode 303. Range Sum Query - Immutable | Dynamic Programming

303. Range Sum Query - Immutable Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive. Example: Given nums = [-2, 0, 3, -5, 2, -1] sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3 Note:

LeetCode Range Sum Query - Mutable

原题链接在这里:https://leetcode.com/problems/range-sum-query-mutable/ 题目: Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive. The update(i, val) function modifies nums by updating the element at index i to v

leetcode Range Sum Query - Immutable

题目连接 https://leetcode.com/problems/range-sum-query-immutable/ Range Sum Query - Immutable Description Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive. Example: Given nums = [-2, 0, 3, -5, 2, -1] su

2-D range sum query implementation(2-D segment tree)

Google interview question:一个二维数组,有两个方法,一个是update(x,y),更新一个cell的值,一个是query(x1,y1,x2,y2),查询(x1,y1,x2,y2)矩形内所有元素的和. Senario 1. update调用次数远大于query. Senario 2. query调用次数远大于update. Senario 3. 两种方法调用一样多. 对于senario 1,只需要用一个二维数组储存数据,update相应的cell,时间复杂度O(1),qu