Codeforces 145E 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 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ;
const double eps = 1e-; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1 struct info {
int up[][];
int dn[][];
} a[N << ]; info operator + (const info& a, const info& b) {
info ans;
ans.up[][] = a.up[][] + b.up[][];
ans.up[][] = max(a.up[][] + max(b.up[][], b.up[][]), a.up[][] + b.up[][]);
ans.up[][] = a.up[][] + b.up[][];
ans.dn[][] = a.dn[][] + b.dn[][];
ans.dn[][] = max(a.dn[][] + max(b.dn[][], b.dn[][]), a.dn[][] + b.dn[][]);
ans.dn[][] = a.dn[][] + b.dn[][];
return ans;
} int lazy[N << ]; void change(int rt) {
swap(a[rt].up[][], a[rt].dn[][]);
swap(a[rt].up[][], a[rt].dn[][]);
swap(a[rt].up[][], a[rt].dn[][]);
} void push(int rt) {
if(lazy[rt]) {
change(rt << ); change(rt << | );
lazy[rt << ] ^= ;
lazy[rt << | ] ^= ;
lazy[rt] = ;
}
} void build(int l, int r, int rt) {
if(l == r) {
int x; scanf("%1d", &x);
if(x == ) {
a[rt].up[][] = ;
a[rt].up[][] = ;
a[rt].up[][] = ;
a[rt].dn[][] = ;
a[rt].dn[][] = ;
a[rt].dn[][] = ;
}
else {
a[rt].up[][] = ;
a[rt].up[][] = ;
a[rt].up[][] = ;
a[rt].dn[][] = ;
a[rt].dn[][] = ;
a[rt].dn[][] = ;
}
return;
}
int mid = l + r >> ;
build(lson); build(rson);
a[rt] = a[rt << ] + a[rt << | ];
} void update(int L, int R, int l, int r, int rt) {
if(l >= L && r <= R) {
lazy[rt] ^= ;
change(rt);
return;
}
int mid = l + r >> ;
push(rt);
if(L <= mid) update(L, R, lson);
if(R > mid) update(L, R, rson);
a[rt] = a[rt << ] + a[rt << | ];
} int n, m;
char s[]; int main() {
scanf("%d%d", &n, &m);
build(, n, );
while(m--) {
scanf("%s", s);
if(s[] == 'c') {
printf("%d\n", max(a[].up[][], max(a[].up[][], a[].up[][])));
} else {
int L, R;
scanf("%d%d", &L, &R);
update(L, R, , n, );
}
}
return ;
} /*
*/
Codeforces 145E Lucky Queries 线段树的更多相关文章
- 数据结构(线段树):CodeForces 145E Lucky Queries
E. Lucky Queries time limit per test 3 seconds memory limit per test 256 megabytes input standard in ...
- Codeforces 1117G Recursive Queries [线段树]
Codeforces 洛谷:咕咕咕 思路 设\(L_i,R_i\)为\(i\)左右第一个大于它的位置. 对于每一个询问\(l,r\),考虑区间每一个位置的贡献就是\(\min(r,R_i-1)-\ma ...
- Buses and People CodeForces 160E 三维偏序+线段树
Buses and People CodeForces 160E 三维偏序+线段树 题意 给定 N 个三元组 (a,b,c),现有 M 个询问,每个询问给定一个三元组 (a',b',c'),求满足 a ...
- CodeForces 877E DFS序+线段树
CodeForces 877E DFS序+线段树 题意 就是树上有n个点,然后每个点都有一盏灯,给出初始的状态,1表示亮,0表示不亮,然后有两种操作,第一种是get x,表示你需要输出x的子树和x本身 ...
- [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)
[Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...
- [Codeforces 1199D]Welfare State(线段树)
[Codeforces 1199D]Welfare State(线段树) 题面 给出一个长度为n的序列,有q次操作,操作有2种 1.单点修改,把\(a_x\)修改成y 2.区间修改,把序列中值< ...
- [Codeforces 316E3]Summer Homework(线段树+斐波那契数列)
[Codeforces 316E3]Summer Homework(线段树+斐波那契数列) 顺便安利一下这个博客,给了我很大启发(https://gaisaiyuno.github.io/) 题面 有 ...
- Codeforces Round #590 (Div. 3) D. Distinct Characters Queries(线段树, 位运算)
链接: https://codeforces.com/contest/1234/problem/D 题意: You are given a string s consisting of lowerca ...
- [CodeForces - 678F] Lena and Queries 线段树维护凸包
大致题意: 给出三种操作 1.往平面点集中添加一个点 2.删除第i次添加的点 3.给出一个q,询问平面点集中的q*x+y的最大值 首先对于每个询问,可将z=q*x+y转化为y=z-q*x,即过点(x, ...
随机推荐
- Java Socket/HttpURLConnection读取HTTP网页
以读取百度的http网页为例.如果知道了IP地址和端口,然后新建一个Socket,就直接去读百度的首页,根本没反应,原因是www.baidu.com是以http协议传输的,而现在要以Socket原始的 ...
- Problem A: 道路建设 解题报告
一定存在一个最优解是一条链 否则可以接上去,不会更差 边权最小的边一定在这条链上 这个比较显然 可以把所有边都减去这个最后加上就行了 把链上的边按距离当前根的深度从小到大排列,设第一个零边位置为\(k ...
- 【bzoj2440】 中山市选2011—完全平方数
http://www.lydsy.com/JudgeOnline/problem.php?id=2440 (题目链接) 题意 求第K个不含有完全平方因子的数 Solution 没想到莫比乌斯还可以用来 ...
- 前端学习 -- Css -- 浮动
块元素在文档流中默认垂直排列,所以这个三个div自上至下依次排开,如果希望块元素在页面中水平排列,可以使块元素脱离文档流. 使用float来使元素浮动,从而脱离文档流 可选值: none,默认值,元素 ...
- Linux SSH免登陆配置步骤
[jans@centos2 ~]# cd ~[jans@centos2 ~]# ssh-keygen -t rsa //生成rsa加密的公钥和密钥[jans@centos2 ~]# cat .ssh ...
- cygwin简介及使用
一个是真实的假货,一个是冒牌的真品前指 Cygwin,后指 Linux/VMWare 路不管平还是陡,终归你要走的,如果你愿意投入到linux开发的社群中来,不会安装linux系统,不会配置工作环境是 ...
- Python数据分析初始(一)
基础库 pandas:python的一个数据分析库(pip install pandas) pandas 是基于 NumPy 的一个 python 数据分析包,主要目的是为了 数据分析 .它提供了大量 ...
- python---django中models配置修改数据库引擎
Django支持多种数据库,sqlite,mysql,oracle等,其默认数据库是sqlite 在settings文件中可以发现: DATABASES = { 'default': { 'ENGIN ...
- Spark记录-Scala语句(运算符-if-for-while-try-模式匹配)
Scala条件运算符 Scala条件运算符在下表中列出. 运算符 操作 描述 && 与 运算符左侧和右侧的值为true.仅当左侧为真时,右侧才被计算. || 或 左侧或右侧的至少一个值 ...
- Easy2Boot-小清新教程
Author:KillerLegend Date:2014.8.14 From:http://www.cnblogs.com/killerlegend/p/3913614.html 之所以说是小清新, ...