LOJ 6277 數列分塊入門 1

2022-07-20 04:39:08 字數 1355 閱讀 1817

給出乙個長為 n 的數列,以及 n 個操作,操作涉及區間加法,單點查值。

第一行輸入乙個數字 n。

第二行輸入 n 個數字,第 i 個數字為 \(a_i\) ,以空格隔開。

接下來輸入 n 行詢問,每行輸入四個數字 \(\mathrm,l,r,c,\)以空格隔開。

若 \(\mathrm = 0\),表示將位於 \([l,r]\) 的之間的數字都加 c。

若 \(\mathrm = 1\),表示詢問 \(a_r\)的值(l 和 c 忽略)。

對於每次詢問,輸出一行乙個數字表示答案。

4

1 2 2 3

0 1 3 1

1 0 1 0

0 1 2 2

1 0 2 0

2

5

最基礎分塊題,樹狀陣列線段樹隨便切

區間加,整塊打標記,散塊暴力加

單點查詢,權值+所在塊標記

#include#include#include#include#include#include#include#include#define _ 0

#define ll long long

#define space putchar(' ')

#define enter putchar('\n')

#define fuu(x,y,z) for(int x=(y),x##end=z;x<=x##end;x++)

#define fu(x,y,z) for(int x=(y),x##end=z;x=x##end;x--)

#define fd(x,y,z) for(int x=(y),x##end=z;x>x##end;x--)

#define mem(x,y) memset(x,y,sizeof(x))

#ifndef olinr

inline char getc()

#else

#define getc() getchar()

#endif

templateinline void in(t &x)

const int inf=0x7fffffff;

struct k

}e[50505];

struct seq

a[50505];

int num;

int n;

inline void init()

}inline void add(int l,int r,int c)

inline int query(int p)

int main()

return ~~(0^_^0);

}

LOJ 6277 數列分塊入門 1 (分塊)

給出乙個長為 nnn 的數列,以及 nnn 個操作,操作涉及區間加法,單點查值。分塊,每次更新的話對塊兩側不完整的地方暴力更新,對完整的塊內部分打標記,查詢時直接返回資料值和標記部分的值即可。include using namespace std typedef long long ll const...

LOJ 6277 數列分塊入門 1(分塊入門)

記憶體限制 256 mib時間限制 100 ms標準輸入輸出 題目型別 傳統評測方式 文字比較 上傳者 hzwer 提交 提交記錄 統計討論 3 測試資料 題目描述 給出乙個長為 n 的數列,以及 n 個操作,操作涉及區間加法,單點查值。輸入格式 第一行輸入乙個數字 n。第二行輸入 n 個數字,第 ...

LOJ 數列分塊入門 1

link 優雅的暴力,對於乙個數列,他不是乙個元素乙個元素處理,而是分成若干塊,成塊成塊的處理,以此達到降低時間複雜度的目的。首先,我們需要處理劃分的塊的大小 block 一般是根號n 塊的數目 每乙個元素對應第幾塊,然後,每一塊的左端點和右端點。完整的塊 更新 我們用lz i lz i lz i ...