题目链接  牛客练习赛29E

对$20$位分别建立线段树。首先$1$和$2$可以合起来搞(左移右移其实是等效的)

用个lazy标记下。转移的时候加个中间变量。

$3$和$4$其实就是区间$01$覆盖操作。

$5$就直接做就可以了。

#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b)	for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define MP make_pair
#define fi first
#define se second typedef long long LL; const int N = 2e5 + 10; int s[N << 2][21], tmp[21], lazy[N << 2];
int a[N];
int n, q;
int op, l, r, v;
LL ans; void rotate(int x, int v){
rep(i, 0, 19) tmp[i] = s[x][(i + v) % 20];
rep(i, 0, 19) s[x][i] = tmp[i];
lazy[x] += v;
lazy[x] %= 20;
} void build(int x, int l, int r){
if (l == r){
rep(i, 0, 19) s[x][i] = (a[l] >> i) & 1;
return;
} int mid = (l + r) >> 1;
build(x << 1, l, mid);
build(x << 1 | 1, mid + 1, r);
rep(i, 0, 19) s[x][i] = s[x << 1][i] + s[x << 1 | 1][i];
} void update(int x, int L, int R){
if (l <= L && R <= r){
if (op == 1) rotate(x, v);
else if (op == 2) rotate(x, 20 - v);
else if (op == 3){
rep(i, 0, 19) if ((v >> i) & 1) s[x][i] = R - L + 1;
} else if (op == 4){
rep(i, 0, 19) if (!((v >> i) & 1)) s[x][i] = 0;
} else{
rep(i, 0, 19) ans += ((LL)s[x][i] << i);
} return ;
} int len = R - L + 1, mid = (L + R) >> 1; if (lazy[x]){
rotate(x << 1, lazy[x]);
rotate(x << 1 | 1, lazy[x]);
lazy[x] = 0;
} rep(i, 0, 19){
if (s[x][i] == len){
s[x << 1][i] = len - len / 2;
s[x << 1 | 1][i] = len / 2;
} else if (s[x][i] == 0){
s[x << 1][i] = 0;
s[x << 1 | 1][i] = 0;
} } if (l <= mid) update(x << 1, L, mid);
if (r > mid) update(x << 1 | 1, mid + 1, R);
rep(i, 0, 19) s[x][i] = s[x << 1][i] + s[x << 1 | 1][i];
} int main(){ scanf("%d%d", &n, &q); rep(i, 1, n) scanf("%d", a + i);
build(1, 1, n); while (q--){
scanf("%d%d%d%d", &op, &l, &r, &v);
ans = 0;
update(1, 1, n);
if (op == 5) printf("%lld\n", ans);
} return 0;
}

  

牛客练习赛 29 E 位运算?位运算!(线段树)的更多相关文章

  1. 牛客练习赛53 E 老瞎眼 pk 小鲜肉 (线段树,思维)

    链接:https://ac.nowcoder.com/acm/contest/1114/E来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...

  2. 牛客练习赛44 B:小y的线段

    链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 题目描述 给出\(n\)条线段,第\(i\)条线段的长度为\(a_i\),每次可以从第\(i\) ...

  3. 牛客练习赛 23 C 托米的位运算

    链接:https://www.nowcoder.com/acm/contest/156/C来源:牛客网 托米完成了1317的上一个任务,十分高兴,可是考验还没有结束 说话间1317给了托米 n 个自然 ...

  4. 牛客练习赛33 D tokitsukaze and Inverse Number (树状数组求逆序对,结论)

    链接:https://ac.nowcoder.com/acm/contest/308/D 来源:牛客网 tokitsukaze and Inverse Number 时间限制:C/C++ 1秒,其他语 ...

  5. 2019牛客多校第四场B xor——线段树&&线性基的交

    题意 给你 $n$ 个集合,每个集合中包含一些整数.我们说一个集合表示一个整数当且仅当存在一个子集其异或和等于这个整数.现在你需要回答 $m$ 次询问 ($l, r, x$),是否 $l$ 到 $r$ ...

  6. 牛客练习赛29 F 算式子

    https://www.nowcoder.com/acm/contest/211/F 经典题. 1.分区间 2.向下取整的值变化 & 合并相同值 #include <bits/stdc+ ...

  7. 牛客练习赛29 B

    炎热的早上,gal男神们被迫再操场上列队,gal男神们本来想排列成x∗x的正方形,可是因为操场太小了(也可能是gal男神太大了),校长安排gal男神们站成多个4∗4的正方形(gal男神们可以正好分成n ...

  8. 牛客练习赛29 B 列队

    [题解] 把某一行或某一列有4个1的都统计出来,然后首尾接上尽量长的,注意首尾不能选上同一个矩阵,要维护前缀.后缀1最大值和次大值. 还要注意维护矩阵内连续1的长度,因为可能有 0 0 0 0 这种情 ...

  9. 牛客小白月赛12 H(dfs序+线段树),F(分块思想+bit),J(二分)

    H 华华和月月种树 链接:https://ac.nowcoder.com/acm/contest/392/H 思路:先得到整棵树最终的形态,在这棵树上进行三种操作,用dfs跑下,第二种操作就直接对最终 ...

随机推荐

  1. UVA 1649 Binomial coefficients

    https://vjudge.net/problem/UVA-1649 题意: 输入m,求所有的C(n,k)=m m<=1e15 如果枚举n,那么C(n,k)先递增后递减 如果枚举k,那么C(n ...

  2. bzoj 3196/ Tyvj 1730 二逼平衡树 (线段树套平衡树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description ...

  3. 51Nod 1344 走格子 | 贪心

    Input示例 5 1 -2 -1 3 4 Output示例 2 贪心 #include <bits/stdc++.h> using namespace std; typedef long ...

  4. Windows下端口占用查看

    假如我们需要确定谁占用了我们的80端口 1.Windows平台在windows命令行窗口下执行:C:\>netstat -aon|findstr "80" TCP     1 ...

  5. 省队集训Day1 睡觉困难综合征

    传送门:https://www.luogu.org/problem/show?pid=3613 [题解] 按二进制位分开,对于每一位,用“起床困难综合征”的方法贪心做. 写棵LCT,维护正反两种权值, ...

  6. 【洛谷 P3187】 [HNOI2007]最小矩形覆盖 (二维凸包,旋转卡壳)

    题目链接 嗯,毒瘤题. 首先有一个结论,就是最小矩形一定有条边和凸包重合.脑补一下就好了. 然后枚举凸包的边,用旋转卡壳维护上顶点.左端点.右端点就好了. 上顶点用叉积,叉积越大三角形面积越大,对应的 ...

  7. vue_router添加点击事件

    1.在vue学习中遇到给router-link 标签添加事件@click .@mouseover等无效的情况 原来的代码: <router-link to='/SelectPage' @clic ...

  8. 理解js中私有变量

    私有变量在js中是个什么概念.当下我的认识是var所定义的变量,实际可以理解为属性和方法,或者单单是临时存储器,不归属任何对象. 一个声明函数: function a(){  var v = &quo ...

  9. 模型验证与模型集成(Ensemble)

    作者:吴晓军 原文:https://zhuanlan.zhihu.com/p/27424282 模型验证(Validation) 在Test Data的标签未知的情况下,我们需要自己构造测试数据来验证 ...

  10. python中的argparse模块

    argparse干什么用的? 答:参数设置,比如python demo.py -h 诸如此类的. 开始学习这个模块: parser = argparse.ArgumentParser() #使用这个模 ...