Codeforces 145E Lucky Queries 线段树
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 线段树相关推荐
- CodeForces - 817F MEX Queries(线段树lazy序)
题目链接:点击查看 题目大意:初始时有一个空的集合,需要执行 n 次操作: 1 l r:将区间 [ l , r ] 内未出现的数加入到集合中 2 l r:将区间 [ l , r ] 内出现的数字全部删 ...
- CodeForces - 1422F Boring Queries(主席树+线段树/RMQ)
题目链接:点击查看 题目大意:给出 n 个数组成的数组 a ,再给出 m 次询问,每次询问需要回答区间 [ l , r ] 中所有元素的最小公倍数,强制在线 题目分析:首先考虑多个数的最小公倍数该如何 ...
- 20.CF817F MEX Queries 线段树(Lazy标记练习)
20.CF817F MEX Queries 离散化+区间覆盖+区间反转线段树 个人Limitの线段树题单题解主目录:Limitの线段树题单 题解目录_HeartFireY的博客-CSDN博客 要求维护 ...
- Codeforces 833B 题解(DP+线段树)
题面 传送门:http://codeforces.com/problemset/problem/833/B B. The Bakery time limit per test2.5 seconds m ...
- Codeforces 997E Good Subsegments (线段树)
题目链接 https://codeforces.com/contest/997/problem/E 题解 经典题,鸽了 159 天终于看明白题解了.. 考虑一个区间是连续的等价于这个区间内的 \((\ ...
- CodeForces - 1539F Strange Array(线段树区间合并)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,规定位置 iii 的贡献是:设 x=a[i]x=a[i]x=a[i],选择一个包含 iii 的区间 [l,r][l,r][l,r],将其中 ...
- CodeForces - 1430E String Reversal(线段树+模拟)
题目链接:点击查看 题目大意:给出一个字符串 sss ,令其反转的串为 ttt ,每次操作可以将 ttt 中的两个相邻位置的字符交换,问最少需要进行多少次操作才能使得 ttt 变成 sss 题目分析: ...
- 【codeforces 12D】【线段树】【降维】【离散化】【三元组比较大小】
[题意] 给出n个女士的三位属性xi,yi,zi(注意此处是一行x给完再给y再给z).若存在xi>xj && yi > yj && zi>zj ,那 ...
- Codeforces 1108 E2(线段树+思维)
传送们 题意: 给你一个长度为nnn的数列bbb.以及mmm个区间. 你可以选取111个或多个这样的区间aia_iai,使得令区间aia_iai所对应的所有值bib_ibi都减111.你最终要使 ...
- CodeForces - 1454F Array Partition(线段树+二分)
题目链接:点击查看 题目大意:给出一个长度为 n 的序列,现在要求求出任意一组 x , y , z,满足下列条件: x + y + z = n max( 1 , x ) = min( x + 1 , ...
最新文章
- 大神开车的标题-python中类方法、类实例方法、静态方法的使用与区别
- 线程里面的yield();方法(让出线程)
- 一分钟理清Mysql的锁类型——《深究Mysql锁》
- aspjpeg已过期_Persits.Jpeg.1错误’800a0004′ AspJpeg组件过期解决方法 - YangJunwei
- python算法——冒泡排序
- M3U8下载,直播源下载,FLASH下载(三)-直播源下载
- 如何使用一套键盘鼠标,同时控制多台电脑?
- 2019奥斯卡谁是赢家 这里有一份来自AI的预测名单
- 思维导图——线性代数知识点总结
- 会员260万,续卡率居高不下,山姆有着怎样的魔力?
- 面向对象的15、18位中国大陆身份证号码解析、工具
- 云计算基础与应用 第二章 云计算技术架构
- MATLAB必看书籍推荐
- ARM公版架构迭代迅速 国产ARM架构落伍
- uniapp onChooseAvatar,uniapp微信头像昵称填写,uniapp chooseAvatar,does not have a method “onChooseAvatar“
- android+sim卡软件,超级SIM卡APP
- @Inherited 的作用
- 天龙八部哪个服务器里面人数最多的,天龙八部怀旧服:不删档各大门派人数出来了!你猜哪个门派人多?...
- Live Server 正常启用 但是网页不更新 解决方法
- 蘑菇街2016研发工程师在线编程题 - 题解
热门文章
- redis缓存路由为空_千万别看,怕你成为面霸!美团T9总结的Netty+Redis+ZooKeeper核心知识点笔记...
- Neo4j之下载安装:windows
- android MySQL servlet_使用MySQL和Servlet编写Android接口样例
- python 迭代器的方法_python--魔法方法,属性和迭代器
- 谈谈全自动安装常使用的pip install的原理及作用!!!
- C语言数组旋转问题(C笔记)
- 信用评分-(scorecard)记分卡开发流程,详细介绍分数校准原理calibration
- PDF文本内容批量提取到Excel
- pytorch 网络搭建简要步骤
- OpenCV(一)---支持向量机 SVM