區間加,區間乘,單點查詢。
跟線段樹的差不多,為了避免精度問題要先乘再加。區別也和其他的差不多,殘塊暴力。然後就沒什麼了。scanf讀int要& !
1 #include2 #include3 #include4 #include5using
namespace
std;
6const
int mod = 10007;7
8int atag[350],mtag[350],v[100010],bl[100010];9
intn,blo,opt,l,r,c;
1011
void down(int
x)21
22void add(int l,int r,int
c)29
down(bl[l]),down(bl[r]);
30for(int i = l;i <= bl[l]*blo;i++)
31 v[i] += c,v[i] %=mod;
32for(int i = (bl[r]-1)*blo+1;i <= r;i++)
33 v[i] += c,v[i] %=mod;
34for(int i = bl[l]+1;i < bl[r];i++)
35 atag[i] += c,atag[i] %=mod;36}
3738
int ask(int
x)41
42void mul(int l,int r,int
c)49
down(bl[l]),down(bl[r]);
50for(int i = l;i <= bl[l]*blo;i++)
51 v[i] *= c,v[i] %=mod;
52for(int i = (bl[r]-1)*blo+1;i <= r;i++)
53 v[i] *= c,v[i] %=mod;
54for(int i = bl[l]+1;i < bl[r];i++)
55 atag[i] *= c,atag[i] %=mod,
56 mtag[i] *= c,mtag[i] %=mod; 57}
5859
intmain()
66for(int i = 1;i <= bl[n];i++)mtag[i] = 1;67
for(int i = 1;i <= n;i++)74}
75return0;
76 }
LOJ 6283 數列分塊入門 7
記憶體限制 256 mib時間限制 500 ms標準輸入輸出 題目型別 傳統評測方式 文字比較 上傳者 hzwer 提交提交記錄 統計討論 測試資料 題目描述 給出乙個長為 nnn 的數列,以及 nnn 個操作,操作涉及區間乘法,區間加法,單點詢問。輸入格式 第一行輸入乙個數字 nnn。第二行輸入 ...
LibreOJ 6283 數列分塊入門 7
題意 給你乙個n nn個整數的序列a aa,讓你進行三種操作 分析 這裡顯而易見的是,如果我們分塊,那麼需要兩個標記來儲存加法標記和乘法標記,那麼這裡有個關鍵問題,就是順序,順序不同結果不同 我們修改的時候是有順序的,而我們對於標記的操作,到最後是統一修改的,並不考慮乘法和加法的順序 假設這裡有乙個...
LOJ 數列分塊入門 1
link 優雅的暴力,對於乙個數列,他不是乙個元素乙個元素處理,而是分成若干塊,成塊成塊的處理,以此達到降低時間複雜度的目的。首先,我們需要處理劃分的塊的大小 block 一般是根號n 塊的數目 每乙個元素對應第幾塊,然後,每一塊的左端點和右端點。完整的塊 更新 我們用lz i lz i lz i ...