题解

题意

题目链接

Sol

ODT板子题.....

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define LL long long
#define Fin(x) freopen(#x".in", "r", stdin);
#define Fout(x) freopen(#x".out", "w", stdout);
#define fi first
#define se second
#define int long long
using namespace std;
const int MAXN = 1e5 + 10;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N, M;
#define sit set<Node>::iterator
struct Node {
int l, r;
mutable int v;
bool operator < (const Node &rhs) const {
return l < rhs.l;
}
};
set<Node> s;
sit split(int p) {
sit pos = s.lower_bound({p});
if(pos != s.end() && pos->l == p) return pos;
pos--; int L = pos->l, R = pos->r, V = pos->v;
s.erase(pos);
s.insert({L, p - 1, V});
return s.insert({p, R, V}).fi;
}
void Mem(int l, int r, int v) {
sit ed = split(r + 1), bg = split(l);
s.erase(bg, ed);
s.insert({l, r, v});
}
void Rev(int l, int r) {
sit ed = split(r + 1), bg = split(l);
for(sit i = bg; i != ed; i++) i->v ^= 1;
}
int QueryNum(int l, int r) {
int ans = 0; sit ed = split(r + 1), bg = split(l);
for(sit i = bg; i != ed; i++)
if(i->v == 1) ans += i->r - i->l + 1;
return ans;
}
int QuerySuc(int l, int r) {
int ans = 0, pre = 0; sit ed = split(r + 1), bg = split(l);
for(sit i = bg; i != ed; i++)
if(i->v == 1) ans = max(ans, i->r - i->l + 1 + pre), pre += i->r - i->l + 1;
else pre = 0;
return ans;
}
signed main() {
N = read(); M = read();
for(int i = 1; i <= N; i++) s.insert({i, i, read()});
s.insert({N + 1, N + 1, 0});
for(int i = 1; i <= M; i++) {
int op = read(), a = read() + 1, b = read() + 1;
if(op == 0 || op == 1) Mem(a, b, op);
else if(op == 2) Rev(a, b);
else if(op == 3) printf("%d\n", QueryNum(a, b));
else printf("%d\n", QuerySuc(a, b));
}
return 0;
}

洛谷P2572 [SCOI2010]序列操作(ODT)的更多相关文章

  1. 洛谷 P2572 [SCOI2010]序列操作

    题意简述 维护一个序列,支持如下操作 把[a, b]区间内的所有数全变成0 把[a, b]区间内的所有数全变成1 把[a,b]区间内所有的0变成1,所有的1变成0 询问[a, b]区间内总共有多少个1 ...

  2. 洛谷$P2572\ [SCOI2010]$ 序列操作 线段树/珂朵莉树

    正解:线段树/珂朵莉树 解题报告: 传送门$w$ 本来是想写线段树的,,,然后神仙$tt$跟我港可以用珂朵莉所以决定顺便学下珂朵莉趴$QwQ$ 还是先写线段树做法$QwQ$? 操作一二三四都很$eas ...

  3. 洛谷P2572 [SCOI2010]序列操作

    线段树 pushdown写的很浪~ #include<cstdio> #include<cstdlib> #include<algorithm> #include& ...

  4. 洛谷P2572 [SCOI2010]序列操作(珂朵莉树)

    传送门 珂朵莉树是个吼东西啊 这题线段树代码4k起步……珂朵莉树只要2k…… 虽然因为这题数据不随机所以珂朵莉树的复杂度实际上是错的…… 然而能过就行对不对…… (不过要是到时候noip我还真不敢打… ...

  5. 【题解】Luogu P2572 [SCOI2010]序列操作

    原题传送门:P2572 [SCOI2010]序列操作 这题好弱智啊 裸的珂朵莉树 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 操作1:把区间内所有数推平成0,珂朵莉树基本操作 ...

  6. P2572 [SCOI2010]序列操作

    对自己 & \(RNG\) : 骄兵必败 \(lpl\)加油! P2572 [SCOI2010]序列操作 题目描述 lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要 ...

  7. Luogu P2572 [SCOI2010]序列操作 线段树。。

    咕咕了...于是借鉴了小粉兔的做法ORZ... 其实就是维护最大子段和的线段树,但上面又多了一些操作....QWQ 维护8个信息:1/0的个数(sum),左/右边起1/0的最长长度(ls,rs),整段 ...

  8. bzoj 1858: [Scoi2010]序列操作

    1858: [Scoi2010]序列操作 Time Limit: 10 Sec  Memory Limit: 64 MB 线段树,对于每个区间需要分别维护左右和中间的1和0连续个数,并在op=4时特殊 ...

  9. BZOJ 1858: [Scoi2010]序列操作( 线段树 )

    略恶心的线段树...不过只要弄清楚了AC应该不难.... ---------------------------------------------------------------- #inclu ...

随机推荐

  1. Linux下的redis的持久化,主从同步及哨兵

    redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失, 为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持久 ...

  2. sublime text 3中安装ctags支持函数跳转,安装convertToUtf8支持中文步骤[工具篇]

    sublime text x是个很不错的编辑器,但是各种插件都需要自己安装,有时也有点不方便,尤其是自己还不不知道怎么安装的时候.开发中经常用到的,函数跳转,就是一个比较难安装的东西,记录如下(系统为 ...

  3. Spring MVC 后端获取前端提交的json格式字符串并直接转换成control方法对应的参数对象

    场景: 在web应用开发中,spring mvc凭借出现的性能和良好的可扩展性,导致使用日渐增多,成为事实标准,在日常的开发过程中,有一个很常见的场景:即前端通过ajax提交方式,提交参数为一个jso ...

  4. .NET手记-Autofac进阶(注册的概念 Registering Concepts)

    通过创建ContainerBuilder并配置暴露的service(接口或者类型)来使用Autofac注册我们的组件. 组件(Components) 可以通过反射, 对象实例,或者lambda表达式来 ...

  5. SOA总结(脑图图片)

  6. 使用SonarCloud对.NET Core项目进行静态代码分析

    本文将介绍如何使用SonarCloud进行.NET Core项目的静态代码分析.SonarCloud是SonarQube提供的基于云的版本,特别针对于开源项目是免费的. 首先,在sonarcloud. ...

  7. docker使用技巧小记

    1.在使用docker的时候有很多人习惯使用官方镜像.有的人喜欢自己制作镜像,有的时候都是使用默认的配置启动的服务,或者自己在制作镜像的时候直接将配置文件打包到镜像里面了.有的时候会碰到要修改配置文件 ...

  8. #6 Python数据类型及运算

    前言 前文讲述了Python的输入输出以及变量的相关知识点,本节将探讨Python的数据类型以及数据之间的运算方式! 一.Python数据类型 上一节弄清了变量,其实变量所指向的值是有自己独特的数据类 ...

  9. mybatis教程2(配置文件)

    MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配置 propertie ...

  10. IOS获取资源路径

    1. 获取已经添加到xcode工程中的某一资源文件 file.txt 的路径 NSString *filePath_= [[NSBundle mainBundle] pathForResource:@ ...