Lucky Queries

感觉是很简单的区间合并, 但是好像我写的比较麻烦。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long long
using namespace std;const int N = 1e6 + 7;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-8;#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1struct info {int up[2][2];int dn[2][2];
} a[N << 2];info operator + (const info& a, const info& b) {info ans;ans.up[0][0] = a.up[0][0] + b.up[0][0];ans.up[0][1] = max(a.up[0][0] + max(b.up[1][1], b.up[0][1]), a.up[0][1] + b.up[1][1]);ans.up[1][1] = a.up[1][1] + b.up[1][1];ans.dn[1][1] = a.dn[1][1] + b.dn[1][1];ans.dn[1][0] = max(a.dn[1][1] + max(b.dn[0][0], b.dn[1][0]), a.dn[1][0] + b.dn[0][0]);ans.dn[0][0] = a.dn[0][0] + b.dn[0][0];return ans;
}int lazy[N << 2];void change(int rt) {swap(a[rt].up[0][0], a[rt].dn[1][1]);swap(a[rt].up[1][1], a[rt].dn[0][0]);swap(a[rt].up[0][1], a[rt].dn[1][0]);
}void push(int rt) {if(lazy[rt]) {change(rt << 1); change(rt << 1 | 1);lazy[rt << 1] ^= 1;lazy[rt << 1 | 1] ^= 1;lazy[rt] = 0;}
}void build(int l, int r, int rt) {if(l == r) {int x; scanf("%1d", &x);if(x == 4) {a[rt].up[0][0] = 1;a[rt].up[0][1] = 0;a[rt].up[1][1] = 0;a[rt].dn[0][0] = 1;a[rt].dn[1][0] = 0;a[rt].dn[1][1] = 0;}else {a[rt].up[0][0] = 0;a[rt].up[0][1] = 0;a[rt].up[1][1] = 1;a[rt].dn[0][0] = 0;a[rt].dn[1][0] = 0;a[rt].dn[1][1] = 1;}return;}int mid = l + r >> 1;build(lson); build(rson);a[rt] = a[rt << 1] + a[rt << 1 | 1];
}void update(int L, int R, int l, int r, int rt) {if(l >= L && r <= R) {lazy[rt] ^= 1;change(rt);return;}int mid = l + r >> 1;push(rt);if(L <= mid) update(L, R, lson);if(R > mid)  update(L, R, rson);a[rt] = a[rt << 1] + a[rt << 1 | 1];
}int n, m;
char s[10];int main() {scanf("%d%d", &n, &m);build(1, n, 1);while(m--) {scanf("%s", s);if(s[0] == 'c') {printf("%d\n", max(a[1].up[0][0], max(a[1].up[0][1], a[1].up[1][1])));} else {int L, R;scanf("%d%d", &L, &R);update(L, R, 1, n, 1);}}return 0;
}/*
*/

转载于:https://www.cnblogs.com/CJLHY/p/10398050.html

Codeforces 145E Lucky Queries 线段树相关推荐

  1. CodeForces - 817F MEX Queries(线段树lazy序)

    题目链接:点击查看 题目大意:初始时有一个空的集合,需要执行 n 次操作: 1 l r:将区间 [ l , r ] 内未出现的数加入到集合中 2 l r:将区间 [ l , r ] 内出现的数字全部删 ...

  2. CodeForces - 1422F Boring Queries(主席树+线段树/RMQ)

    题目链接:点击查看 题目大意:给出 n 个数组成的数组 a ,再给出 m 次询问,每次询问需要回答区间 [ l , r ] 中所有元素的最小公倍数,强制在线 题目分析:首先考虑多个数的最小公倍数该如何 ...

  3. 20.CF817F MEX Queries 线段树(Lazy标记练习)

    20.CF817F MEX Queries 离散化+区间覆盖+区间反转线段树 个人Limitの线段树题单题解主目录:Limitの线段树题单 题解目录_HeartFireY的博客-CSDN博客 要求维护 ...

  4. Codeforces 833B 题解(DP+线段树)

    题面 传送门:http://codeforces.com/problemset/problem/833/B B. The Bakery time limit per test2.5 seconds m ...

  5. Codeforces 997E Good Subsegments (线段树)

    题目链接 https://codeforces.com/contest/997/problem/E 题解 经典题,鸽了 159 天终于看明白题解了.. 考虑一个区间是连续的等价于这个区间内的 \((\ ...

  6. CodeForces - 1539F Strange Array(线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,规定位置 iii 的贡献是:设 x=a[i]x=a[i]x=a[i],选择一个包含 iii 的区间 [l,r][l,r][l,r],将其中 ...

  7. CodeForces - 1430E String Reversal(线段树+模拟)

    题目链接:点击查看 题目大意:给出一个字符串 sss ,令其反转的串为 ttt ,每次操作可以将 ttt 中的两个相邻位置的字符交换,问最少需要进行多少次操作才能使得 ttt 变成 sss 题目分析: ...

  8. 【codeforces 12D】【线段树】【降维】【离散化】【三元组比较大小】

    [题意] 给出n个女士的三位属性xi,yi,zi(注意此处是一行x给完再给y再给z).若存在xi>xj && yi > yj  && zi>zj ,那 ...

  9. Codeforces 1108 E2(线段树+思维)

    传送们 题意: 给你一个长度为nnn的数列bbb.以及mmm个区间. 你可以选取111个或多个这样的区间aia_iai​,使得令区间aia_iai​所对应的所有值bib_ibi​都减111.你最终要使 ...

  10. CodeForces - 1454F Array Partition(线段树+二分)

    题目链接:点击查看 题目大意:给出一个长度为 n 的序列,现在要求求出任意一组 x , y , z,满足下列条件: x + y + z = n max( 1 , x ) = min( x + 1 , ...

最新文章

  1. 大神开车的标题-python中类方法、类实例方法、静态方法的使用与区别
  2. 线程里面的yield();方法(让出线程)
  3. 一分钟理清Mysql的锁类型——《深究Mysql锁》
  4. aspjpeg已过期_Persits.Jpeg.1错误’800a0004′ AspJpeg组件过期解决方法 - YangJunwei
  5. python算法——冒泡排序
  6. M3U8下载,直播源下载,FLASH下载(三)-直播源下载
  7. 如何使用一套键盘鼠标,同时控制多台电脑?
  8. 2019奥斯卡谁是赢家 这里有一份来自AI的预测名单
  9. 思维导图——线性代数知识点总结
  10. 会员260万,续卡率居高不下,山姆有着怎样的魔力?
  11. 面向对象的15、18位中国大陆身份证号码解析、工具
  12. 云计算基础与应用 第二章 云计算技术架构
  13. MATLAB必看书籍推荐
  14. ARM公版架构迭代迅速 国产ARM架构落伍
  15. uniapp onChooseAvatar,uniapp微信头像昵称填写,uniapp chooseAvatar,does not have a method “onChooseAvatar“
  16. android+sim卡软件,超级SIM卡APP
  17. @Inherited 的作用
  18. 天龙八部哪个服务器里面人数最多的,天龙八部怀旧服:不删档各大门派人数出来了!你猜哪个门派人多?...
  19. Live Server 正常启用 但是网页不更新 解决方法
  20. 蘑菇街2016研发工程师在线编程题 - 题解

热门文章

  1. redis缓存路由为空_千万别看,怕你成为面霸!美团T9总结的Netty+Redis+ZooKeeper核心知识点笔记...
  2. Neo4j之下载安装:windows
  3. android MySQL servlet_使用MySQL和Servlet编写Android接口样例
  4. python 迭代器的方法_python--魔法方法,属性和迭代器
  5. 谈谈全自动安装常使用的pip install的原理及作用!!!
  6. C语言数组旋转问题(C笔记)
  7. 信用评分-(scorecard)记分卡开发流程,详细介绍分数校准原理calibration
  8. PDF文本内容批量提取到Excel
  9. pytorch 网络搭建简要步骤
  10. OpenCV(一)---支持向量机 SVM