給出乙個長為 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 ...