P2253 好一个一中腰鼓!

题目背景

话说我大一中的运动会就要来了,据本班同学剧透(其实早就知道了),我萌萌的初二年将要表演腰鼓[喷],这个无厘头的题目便由此而来。

Ivan乱入:“忽一人大呼:‘好一个安塞腰鼓!’满座寂然,无敢哗者,遂与外人间隔。”

题目描述

设想一下,腰鼓有两面,一面是红色的,一面是白色的。初二的苏大学神想给你这个oier出一道题。假设一共有N(1<=N<=20,000)个同学表演,表演刚开始每一个鼓都是红色面朝向观众,舞蹈老师会发出M(1<=M<=20,000)个指令,如果指令发给第i个表演的同学,这位同学就会把腰鼓反过来,如果腰鼓之前是红色面朝向观众的,那么就会变成白色面朝向观众,反之亦然。那么问题来了(!?),在老师每一次发出指令后,找到最长的连续的一排同学,满足每相邻的两个手中的腰鼓朝向观众的一面互不相同,输出这样一排连续的同学的人数。

输入格式

第一行有两个整数, 分别为表演的同学总数N, 和指令总数M。

之后M行, 每行有一个整数i: 1<=i<=N, 表示舞蹈老师发出的指令。

输出格式

输出有M行, 其中每i行有一个整数.

表示老师的第i条指令发出之后, 可以找到的满足要求的最长连续的一排表演同学有多长?

输入输出样例

输入 #1

6 2

2

4

输出 #1

3

5

说明/提示

Huangc温馨提示:其实数据根本没你想象的那么大。。。[坏笑]、、

【思路】

线段树

第一次做不是用来区间求和和区间修改的线段树题目

窝太菜了

【题目大意】

一个0串,可以被翻转为1,同理1也可以翻转为0

每一次翻转一个位置

然后求这时候最长的连续的一排同学,满足每相邻的两个手中的腰鼓朝向观众的一面互不相同

【题目分析】

Huangc温馨提示:其实数据根本没你想象的那么大。。。[坏笑]、、

所以跑暴力试一下

第一个点WA,80分QWQ

或许是我写丑了

看题目我是想不到要用线段树的,毕竟之前没有做过这一类的题目

但是洛谷标签提醒了我

所以要用线段树

单点修改很容易

那就难在求最长序列

可以记录某个线段l,r和mi

l表示在这个线段中以左端点为起点的最长合法序列的长度

r表示在这个线段中以右端点为重点的最长合法序列的长度

mi就是这个线段中最长的合法序列长度了

【核心思路】

需要处理处每个线段里面的l,r和mi

k的l至少是等于他左儿子的l的,因为k线段的左端点等于他左儿子的左端点

然后这个时候在看看连接了右儿子之后l会不会增加

不过会增加也是有个前提条件的就是左儿子这一块全部合法才能够连到右儿子上面

判断右儿子和左儿子交界处是否不同

不同的话就将l+右儿子的l

k的r至少是他右儿子的r,理由和上面类似

让再判断连接了左儿子之后r会不会增加

这个也是有前提条件的就是右儿子全部合法不然碰不到左儿子

k的mi是他两个儿子的mi的最大值

但是有可能这个最长合法序列的左右端点都不是左右边界

那就是在中间的情况

所以在和左儿子的r和右儿子的l也就是左右儿子交界的地方那里存在的最长合法序列

输出最大值就好了

【完整代码】

#include<iostream>
#include<cstdio>
#define lson (k << 1)
#define rson (k << 1 | 1)
using namespace std; int read()
{
int sum = 0,fg = 1;
char c = getchar();
while(c < '0' || c > '9')
{
if(c == '-')fg = -1;
c = getchar();
}
while(c >= '0' && c <= '9')
{
sum = sum * 10 + c - '0';
c = getchar();
}
return sum * fg;
}
const int Max = 20004;
struct node
{
int l;//区间内以左端点为起点的合法区间长度
int mi;//区间内合法区间最长的
int r;//区间内以右端点为终点的合法区间的长度
}a[Max << 2];
int opx;
int use[Max];//记录当前情况 void down(int k,int l,int r,int mid)
{
a[k].l = a[lson].l;
if(use[mid] != use[mid + 1] && mid - l + 1 == a[lson].l)
a[k].l += a[rson].l;
a[k].r = a[rson].r;
if(use[mid] != use[mid + 1] && r - mid == a[rson].r)
a[k].r += a[lson].r;
a[k].mi = max(a[lson].mi,a[rson].mi);
if(use[mid] != use[mid + 1])
a[k].mi = max(a[k].mi,a[lson].r + a[rson].l);
return;
} void change(int k,int l,int r)
{
if(l == opx && r == opx)
{
if(use[opx] == 1)
use[opx] = 0;
else
use[opx] = 1;
return;
}
int mid = (l + r) >> 1;
if(opx <= mid)change(lson,l,mid);
if(opx > mid)change(rson,mid + 1,r);
down(k,l,r,mid);
} void build(int k,int l,int r)
{
if(l == r)
{
a[k].l = 1;
a[k].r = 1;
a[k].mi = 1;
return;
}
int mid = (l + r) >> 1;
build(lson,l,mid);
build(rson,mid + 1,r);
down(k,l,r,mid);
} int main()
{
int n = read(),m = read();
build(1,1,n);
for(register int i = 1;i <= m;++ i)
{
opx = read();
change(1,1,n);
cout << max(a[1].mi,max(a[1].l,a[1].r)) << endl;
}
return 0;
}

洛谷 P2253 好一个一中腰鼓! 题解的更多相关文章

  1. 洛谷P2253 好一个一中腰鼓!

    题目背景 话说我大一中的运动会就要来了,据本班同学剧透(其实早就知道了),我萌萌的初二年将要表演腰鼓[喷],这个无厘头的题目便由此而来. Ivan乱入:“忽一人大呼:‘好一个安塞腰鼓!’满座寂然,无敢 ...

  2. 洛谷 P2253 好一个一中腰鼓!

    题目背景 话说我大一中的运动会就要来了,据本班同学剧透(其实早就知道了),我萌萌的初二年将要表演腰鼓[喷],这个无厘头的题目便由此而来. Ivan乱入:“忽一人大呼:‘好一个安塞腰鼓!’满座寂然,无敢 ...

  3. P2253 好一个一中腰鼓!

    题意:给你一个序列,初始是0,每次一个操作,把一个数^=1 每次求出最长01串的长度 正解:线段树(虽然暴力能过) 对于每个区间,记录三个值 lmax,以l为首的01串长度 rmax,以r为尾的01串 ...

  4. 「Luogu P2253 好一个一中腰鼓!」

    就这道题的理论难度来说绿题是有点低了,但是这道题的实际难度来看,顶多黄题,所以建议加强数据或出数据升级版. 前置芝士 线段树:具体可以看我的另一篇文章. 具体做法 暴力的方法想必都会,所以来讲一下正解 ...

  5. 洛谷P1854 花店橱窗布置 分析+题解代码

    洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...

  6. HAOI2006 (洛谷P2341)受欢迎的牛 题解

    HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...

  7. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  8. 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)

    洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...

  9. BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4946 https://www.luogu.org/problemnew/show/P3826 ht ...

随机推荐

  1. AtomicReference示例

    对引用类型的原子性操作 /** * *对引用变量的原子操作 note: *在java中对引用类型的变量,赋值是原子性的,为什么还要有atomicReference,假如要对一个引用类型进行比较,设置等 ...

  2. Consider the following: If you want an embedded database (H2, HSQL or Der...

    这个坑把java进程干掉就可以了,因为占用了 Description: Failed to configure a DataSource: 'url' attribute is not specifi ...

  3. WMware Workstation Pro安装教程

    [1]右键单击WMware Workstation Pro的可执行文件(.exe),选择以管理员身份运行 [2]点击下一步 [3]勾选我接受许可协议中的条款,点击下一步 [4]点击更改,选择安装位置( ...

  4. ASP.NET Core 3.0 WebApi 系列【1】创建ASP.NET Core WebApi 项目

    目录 写在前面 一.运行环境 二.项目搭建 三.测试 API 四.基础知识 五.写在最后 写在前面 C#语言可以创建RESTful服务,被称作WebApi.在这里总结学习使用支持创建.读取.更新.删除 ...

  5. C# winform窗体简单保存界面控件参数到xml

    引用网上的 XMLHelper 地址 :https://www.cnblogs.com/chnboy/archive/2009/04/02/1427652.html 稍做修改 using System ...

  6. DevExpress的下拉框控件LookUpEdit的使用、添加item选项值、修改默认显示值

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  7. Bugku 多次

    网址:http://123.206.87.240:9004/1ndex.php?id=1 前言:bugku中一涉及多次注入的题 1.异或注入(判断字符是否被过滤) 0X00   很明显 注入点在id上 ...

  8. centos7放行1521端口

    [root@localhost ~]# firewall-cmd --zone=public --add-port=1521/tcp --permanent success [root@localho ...

  9. pip install报错:RuntimeError: Python version >= 3.5 required

    由于pip官方的不作为,现如今python2(以及某些低版本python3)配套的pip,已经没法正常的安装pypi包了. 例如需要用到的一套PyCaffe的代码,是基于Python2的,于是用min ...

  10. 交叉编译tmux

    作者:彭东林 邮箱:pengdonglin137@163.com 参考 https://gist.github.com/tessus/5e118d44261a6ab2f198 环境 Qemu-4.1 ...