题目链接  牛客练习赛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. spring事务的一些注意点

    参考文章 http://blog.csdn.net/qq_34021712/article/details/75949779   ©王赛超 1.在需要事务管理的地方加@Transactional 注解 ...

  2. vijos 1071 01背包+输出路径

    描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道:“这副牌少了几张!”众人一数,果然是少了.于是 ...

  3. II8部署WCF服务出错

    环境:Windows 2012 R2 + IIS 8.0 + .NET 4.5 错误404.3 - Not Found: 控制面板->程序->启用或关闭Windows功能,如下图所示,将需 ...

  4. CF911E Stack Sorting

    洛谷题目链接:CF911E Stack Sorting Codeforces题目链接:Stack Sorting 题意翻译 给你一排列的一部分,让你补全整个排列使其字典序最大并且经过一个栈调整顺序之后 ...

  5. consul windows安装

    Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开 ...

  6. Robot Framework Change chrome language

    由于open browser的参数只有一个ff_profile_dir,所以不能指定chrome profile. 只能通过python 传递lang这个参数去改变语言. python: from s ...

  7. Spring的使用优点

    spring事物配置,声明式事务管理和基于@Transactional注解的使用 spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或者 ...

  8. Linux系统网络基础知识及配置

    一:DNS(domain name system)简介 DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而 ...

  9. 完全背包问题入门 (dp)

    问题描述: 有n种重量和价值分别为Wi,Vi的物品,从这些中挑选出总重量不超过W的物品,求出挑选物品的价值总和的最大值,每种物品可以挑选任意多件. 分析: 令dp[i+1][j]表示从前i件物品中挑选 ...

  10. chrome最小字体12px如何修改

    在html标记样式里加入 <style> html { -webkit-text-size-adjust:none } </style> 这样的方式可以设置chrome字体小于 ...