給定長度為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這道題主要是通過樹狀陣列的單點查詢和區間增加來實現,
首先我們新建乙個樹狀陣列b,然後初值為0,開始讀取每條指令,如果是clrd指令,我們就先把b[l]+d,然後把b[r+1]-d;這樣就實現了在區間lr中增加d的操作,這主要是運用的分差求字首和的思想,我們現在的陣列b就好比乙個分差陣列,而對分差陣列求字首和,得到的就是對某個區間的運算元的變化。然後我們再加上原先的a[i]值就可以求出我們的陣列值
#include
using
namespace std;
const
int n=
1e5+10;
int a[n]
,c[n]
;int n;
inline
intlowbit
(int x)
inline
intask
(int x)
inline
void
add(
int x,
int y)
intmain()
else
if(ch==
'q')
}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。你需要處理兩種操作。一種操作是在給定間隔中為每個數字新增一些給定數字。另一種是要...