題目描述
給定長度為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。你需要處理兩種操作。一種操作是在給定間隔中為每個數字新增一些給定數字。另一種是要...