题目链接  牛客练习赛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. java web中resources路径

    UserBean.class.getClassLoader().getResource(filePath).getPath() 或者 Thread.currentThread().getContext ...

  2. HDU 4609 FFT模板

    http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:给你n个数,问任意取三边能够,构成三角形的概率为多少. 思路:使用FFT对所有长度的个数进行卷积(\ ...

  3. [洛谷P1858] 多人背包

    洛谷题目链接:多人背包 题目描述 求01背包前k优解的价值和 输入输出格式 输入格式: 第一行三个数K.V.N 接下来每行两个数,表示体积和价值 输出格式: 前k优解的价值和 输入输出样例 输入样例# ...

  4. 【BZOJ】1718: [Usaco2006 Jan] Redundant Paths 分离的路径

    [题意]给定无向连通图,要求添加最少的边使全图变成边双连通分量. [算法]Tarjan缩点 [题解]首先边双缩点,得到一棵树(无向无环图). 入度为1的点就是叶子,两个LCA为根的叶子间合并最高效,直 ...

  5. CSUST选拔赛题解

    本鶸鸡于本月10号参加了蔽校的选拔赛,成绩差的死,大部分的题都是赛后花了好长时间才补出来的,其中有些题还是靠QAQorz大佬帮忙才能解决,感谢Qls对我的帮助~接下来就附带上我的暴力题解,大佬们有更好 ...

  6. 【CC2530入门教程-02】CC2530的通用I/O端口输入和输出控制

    第2课  CC2530的通用I/O端口输入和输出控制 小蜜蜂科教 / 广东职业技术学院  欧浩源 [通用I/O端口视频教程:https://v.qq.com/x/page/x0793aol7us.ht ...

  7. 移动端页面使用rem布局

    阿里团队的高清布局方案代码 所谓高清方案就是根据设备屏幕的DPR(设备像素比,又称DPPX,比如dpr=2时,表示1个CSS像素由4个物理像素点组成) 动态设置 html 的font-size, 同时 ...

  8. EditText中inputType详解

    <EditText Android:layout_width="fill_parent" android:layout_height="wrap_content&q ...

  9. 异步网络模块之aiohttp的使用(一)

    异步网络模块之aiohttp的使用(一) 平时我们也许用的更多的是requests模块,或者是requests_hml模块,但是他们都属于阻塞类型的不支持异步,速度很难提高,于是后来出现了异步的gre ...

  10. HDU 6109 数据分割 并查集,SET

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6109 题意:中文题面 解法:每次都贪心地尝试将尽量多的条件放进当前这组,遇到第一个与已有条件冲突时,就 ...