题目链接  牛客练习赛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. Test Index

    top1 top11 top2 top1 top11 top2

  2. JavaMail实现邮件的发送

    1,拷贝mail.jar 和activation.jar到项目中 2,开启邮箱的 POP3/SMTP服务,以QQ邮箱为例 进去QQ邮箱-->设置-->账号-->进行设置如下图 注意: ...

  3. MongoDB入门(6)- 我们自己封装的MongoDB-C#版本

    Wisdombud.Mongo 包含内容 MongoDB.Bson.dll MongoDB.Bson.xml MongoDB.Driver.dll MongoDB.Driver.xml Wisdomb ...

  4. MyBatis框架的使用及源码分析(十一) StatementHandler

    我们回忆一下<MyBatis框架的使用及源码分析(十) CacheExecutor,SimpleExecutor,BatchExecutor ,ReuseExecutor> , 这4个Ex ...

  5. codechef September Challenge 2017 Fill The Matrix

    这道题我们发现0就代表相同1代表少1或者大1 那么我们根据题目连边 如果存在1(边权只为或0)个数为奇数的环就是无解 #include<cstdio> #include<cstrin ...

  6. 20155335俞昆《java程序设计》第三周总结

    20155335  2006-2007-2  <Java程序设计>第三周学习总结 ##  教材学习内容总结 首先,关键是区基本类型和类类型,,产生对象必须定义类,类是一个概念,并不存在,对 ...

  7. MyBatis 系列五 之 延迟加载、一级缓存、二级缓存设置

    MyBatis的延迟加载.一级缓存.二级缓存设置 首先我们必须分清延迟加载的适用对象 延迟加载 MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟加载规则推迟对关联对象的se ...

  8. John's trip(POJ1041+欧拉回路+打印路径)

    题目链接:http://poj.org/problem?id=1041 题目: 题意:给你n条街道,m个路口,每次输入以0 0结束,给你的u v t分别表示路口u和v由t这条街道连接,要输出从起点出发 ...

  9. js刷新页面方法 -- (转)

    1,reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload([bForceGet])   参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里 ...

  10. spring boot 注解说明

    Starters 可以创建自己的Starter,但名字格式不能是 spring-boot-starter-*,而是 *-spring-boot-starter.类似Maven插件的规则.   自动配置 ...