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...