數列分塊入門1 9 loj6277 6285

2022-05-08 01:09:06 字數 3513 閱讀 7253

hzwer的講解

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

#include #include #include using namespace std;

int n, a[50005], opt, uu, vv, ww, tag[305], blc, bel[50005];

void add(int uu, int vv, int ww)

}int main()

return 0;

}

給出乙個長為 \(n\) 的數列,以及 \(n\) 個操作,操作涉及區間加法,詢問區間內小於某個值 \(x\) 的元素個數。

#include #include #include #include #include using namespace std;

int n, blc, a[50005], tag[50005], bel[50005], opt, uu, vv, ww;

vectorvec[50005];

void qwq(int tat)

void update(int uu, int vv, int ww)

else

}int query(int uu, int vv, int ww)

for(int i=1; i<=n; i=bel[i]*blc+1)

sort(vec[bel[i]].begin(), vec[bel[i]].end());

for(int i=1; i<=n; i++)

return 0;

}

給出乙個長為n的數列,以及n個操作,操作涉及區間加法,詢問區間內小於某個值x的前驅(比其小的最大元素)。

#include #include #include #include #include using namespace std;

int n, blc, a[100005], bel[100005], tag[100005], opt, uu, vv, ww;

vectorvec[100005];

void qwq(int u)

void update(int uu, int vv, int ww)

else

}int query(int uu, int vv, int ww)

for(int i=1; i<=n; i=bel[i]*blc+1)

sort(vec[bel[i]].begin(), vec[bel[i]].end());

for(int i=1; i<=n; i++)

return 0;

}

給出乙個長為n的數列,以及n個操作,操作涉及區間加法,區間求和。

poj3468

給出乙個長為n的數列,以及n個操作,操作涉及區間開方,區間求和。

#include #include #include using namespace std;

int n, blc, bel[50005], opt, uu, vv, ww, tag[50005], sum[50005], a[50005];

int qwq(int uu, int vv)

return sum[bel[uu]];

}void qaq(int u)

void update(int uu, int vv)

}int query(int uu, int vv)

return re;

}int main()

for(int i=1; i<=n; i++)

return 0;

}

給出乙個長為n的數列,以及n個操作,操作涉及單點插入,單點詢問,資料隨機生成。

#include #include #include #include #include using namespace std;

typedef pairpar;

int n, blc, opt, uu, vv, ww, sta[200005], din, m;

vectorvec[200005];

par query(int uu)

return make_pair(x, uu-1);

}void rebuild()

int main()

for(int i=1; i<=n; i++)

} return 0;

}

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

#include #include #include using namespace std;

int n, a[100005], bel[100005], add[100005], mul[100005], blc;

int opt, uu, vv, ww;

const int mod=10007;

void pushdown(int x)

void updadd(int uu, int vv, int ww)

}void updmul(int uu, int vv, int ww)

for(int i=uu; i<=bel[uu]*blc; i++) a[i] = (a[i] * ww) % mod;

for(int i=(bel[vv]-1)*blc+1; i<=vv; i++) a[i] = (a[i] * ww) % mod;

} }int main()

for(int i=1; i<=n; i++)

return 0;

}

給出乙個長為n的數列,以及n個操作,操作涉及區間詢問等於乙個數c的元素,並將這個區間的所有元素改為c。

#include #include #include using namespace std;

int n, a[100005], tag[100005], bel[100005], blc, uu, vv, ww;

void pushdown(int x)

int update(int uu, int vv, int ww)

else

for(int i=uu; i<=bel[uu]*blc; i++)

for(int i=(bel[vv]-1)*blc+1; i<=vv; i++)

} return re;

}int main()

for(int i=1; i<=n; i++)

return 0;

}

區間眾數

參考luogu4168 蒲公英

LOJ 6277 數列分塊入門 1

給出乙個長為 n 的數列,以及 n 個操作,操作涉及區間加法,單點查值。第一行輸入乙個數字 n。第二行輸入 n 個數字,第 i 個數字為 a i 以空格隔開。接下來輸入 n 行詢問,每行輸入四個數字 mathrm,l,r,c,以空格隔開。若 mathrm 0 表示將位於 l,r 的之間的數字都加 c...

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

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

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

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