洛谷 P2253 好一个一中腰鼓! 题解
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 好一个一中腰鼓! 题解的更多相关文章
- 洛谷P2253 好一个一中腰鼓!
题目背景 话说我大一中的运动会就要来了,据本班同学剧透(其实早就知道了),我萌萌的初二年将要表演腰鼓[喷],这个无厘头的题目便由此而来. Ivan乱入:“忽一人大呼:‘好一个安塞腰鼓!’满座寂然,无敢 ...
- 洛谷 P2253 好一个一中腰鼓!
题目背景 话说我大一中的运动会就要来了,据本班同学剧透(其实早就知道了),我萌萌的初二年将要表演腰鼓[喷],这个无厘头的题目便由此而来. Ivan乱入:“忽一人大呼:‘好一个安塞腰鼓!’满座寂然,无敢 ...
- P2253 好一个一中腰鼓!
题意:给你一个序列,初始是0,每次一个操作,把一个数^=1 每次求出最长01串的长度 正解:线段树(虽然暴力能过) 对于每个区间,记录三个值 lmax,以l为首的01串长度 rmax,以r为尾的01串 ...
- 「Luogu P2253 好一个一中腰鼓!」
就这道题的理论难度来说绿题是有点低了,但是这道题的实际难度来看,顶多黄题,所以建议加强数据或出数据升级版. 前置芝士 线段树:具体可以看我的另一篇文章. 具体做法 暴力的方法想必都会,所以来讲一下正解 ...
- 洛谷P1854 花店橱窗布置 分析+题解代码
洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...
- HAOI2006 (洛谷P2341)受欢迎的牛 题解
HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...
- 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)
洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...
- 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)
洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...
- BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4946 https://www.luogu.org/problemnew/show/P3826 ht ...
随机推荐
- HTML5网页上播放mp4失败的原因
HTML5先网页直接打开mp4 如果打不开 先用格式工厂转化下格式 转成mp4 avc编码 就行了 ps:ae要先导出mp4 然后再用上面的方法 不要导出avi 不然转化成 avc也是播放不了
- [转帖]linux lsof 用法简介
linux lsof 用法简介 https://www.cnblogs.com/saneri/p/5333333.html 1.简介: lsof(list open files)是一个列出当前系统打开 ...
- idea gradle项目导入
然后要选择正确的gradle版本: 每个开源项目的gradle版本,这个很重要.因为每一个gradle版本都不同.
- BCryptPasswordEncoder 判断密码是否相同
加密 BCryptPasswordEncoder encode = new BCryptPasswordEncoder(); encode.encode(password); 比较 matches(C ...
- POSIX 正则表达式 BRE与ERE的差异
BRE,标准正则表达式,basic regular expressions ERE,扩展正则表达式,Extended Regular Expressions POSIX 正则表达式 传统上,POSIX ...
- 在Visual studio上发布web项目,并添加到IIS服务器上。
1.首先发布到IIS上 https://blog.csdn.net/kydkong/article/details/49563193 2.NET4.0部署出错HTTP 错误500.21 - Inter ...
- SQL Date 时间类型处理
SQL 日期(Dates) 2019-10-17 22:17:26 当我们处理日期时,最难的任务恐怕是确保插入的日期的格式,与数据库中日期列的格式相匹配. 保存的如果是日期部分,查询不会有太大问题 ...
- [世预赛] 中国vs菲律宾,第一场考验,国足力争三连胜,比分预测:3:0, 2:0,4:1
7比0大胜关岛,中国国家男子足球队在冲击2022卡塔尔世界杯的征途上收获两连胜,北京时间10月15日20点,中国男足将奔赴巴科洛德,客场挑战菲律宾男足,本场比赛也是中国男足在本次世预赛四十强赛阶段的第 ...
- nginx fastcgi模块ngx_http_fastcgi_module详细解析、使用手册、完整翻译
ngx_http_fastcgi_module 模块允许将请求传递给 FastCGI 服务器. 示例配置 location / { fastcgi_pass localhost:9000; fastc ...
- Delphi - Delphi7 调用阿里大于实现短信消息验证
阿里大于是阿里通信旗下产品,融合了三大运营商的通信能力,提供包括短信.语音.流量直充.私密专线.店铺手机号等个性化服务.每条四分五,价钱还算公道,经老农测试,响应速度非常快,基本上是秒到.官方文档提供 ...