乙個簡單的整數問題

2021-10-08 09:50:04 字數 1327 閱讀 2354

題目描述

給定長度為n的數列a,然後輸入m行操作指令。

第一類指令形如「c l r d」,表示把數列中第l~r個數都加d。

第二類指令形如「q x」,表示詢問數列中第x個數的值。

對於每個詢問,輸出乙個整數表示答案。

輸入格式

第一行包含兩個整數n和m。

第二行包含n個整數a[i]。

接下來m行表示m條指令,每條指令的格式如題目描述所示。

輸出格式

對於每個詢問,輸出乙個整數表示答案。

每個答案佔一行。

資料範圍

1≤n,m≤105,

|d|≤10000,

|a[i]|≤1000000000

輸入樣例:

10 5

1 2 3 4 5 6 7 8 9 10

q 4q 1

q 2c 1 6 3

q 2輸出樣例:41

25

題目分析

將[l,r]區間中的數全部加上d,這個操作我們可以想到用差分來完成。

但是除了這個操作之外還有第二個操作:獲得第x個數的值。

因此不能簡單的用只差分,我們可以用樹狀陣列來維護乙個差分陣列,這樣就可以快速的完成上面的兩個操作了。

**如下

#include

#include

#define ll long long

using

namespace std;

const

int n=

1e5+5;

int n,m;

int a[n]

;ll tri[n]

;int

lowbit

(int x)

void

add(

int x,

int c)

ll sum

(int x)

intmain()

while

(m--

)else

printf

("%lld\n"

,sum

(l))

;//x位置上的數即為tri中x的字首和

}return0;

}

乙個簡單的整數問題

給定長度為n的數列a,然後輸入m行操作指令。第一類指令形如 c l r d 表示把數列中第l r個數都加d。第二類指令形如 q x 表示詢問數列中第x個數的值。對於每個詢問,輸出乙個整數表示答案。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數a i 接下來m行表示m條指令,每條指令的格式如題...

乙個簡單的整數問題

給定長度為n的數列a,然後輸入m行操作指令。第一類指令形如 c l r d 表示把數列中第l r個數都加d。第二類指令形如 q x 表示詢問數列中第x個數的值。對於每個詢問,輸出乙個整數表示答案。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數a i 接下來m行表示m條指令,每條指令的格式如題...

問題 A 乙個簡單的整數問題

問題 a 乙個簡單的整數問題 時間限制 5 sec 記憶體限制 128 mb 提交 75 解決 25 提交 狀態 討論版 命題人 quanxing edit testdata 題目描述 你有 n個整數,a1,a2,an。你需要處理兩種操作。一種操作是在給定間隔中為每個數字新增一些給定數字。另一種是要...