乙個簡單的整數問題

2021-10-08 07:01:55 字數 1068 閱讀 3194

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