洛谷 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 ...
随机推荐
- Postman界面了解
Postman界面了解 2019年3月21日去面试了一家软件测试,本以为自己对简历上写的技能都熟悉,跳个槽,涨点工资,想象很美好,现实太残忍.当问到做接口测试postman和swagger工具的时候, ...
- HTML+css基础 表格标签table Table标签属性 td标签属性
表格标签table: 他是由行与列构成,最小单位是单元格. 行标签 <tr></tr> 单元格标签<td></td> Table标签属性: Bor ...
- [转帖]腾讯云TStack获下一代云计算技术创新奖 与鲲鹏等产品实现兼容性测试
http://www.techweb.com.cn/cloud/2019-12-16/2769286.shtml [TechWeb]12 月 16 日消息,在中国电子技术标准化研究院主办的“第九届中国 ...
- centos6.5 安装openresty
[1]centos6.5 安装openresty步骤 (1)基础依赖库安装 1.1 yum install pcre-devel openssl-devel gcc curl (2)openResty ...
- 项目Gradle版本从4.4升级到4.6
一.背景 Gralde版本与AGP(Android Gradle Plugin)版本具有一定的对应关系,原因在于AGP实质上作为Gradle的插件,依赖于Gradle作为宿主.因此,不同的AGP版本需 ...
- python实现ldap接入
需要提前安装python-ldap模块 python接入ldap其实分了几个步骤: 1.使用一个管理员账户登陆到ldap 2.使用一个字段值是唯一的字段,去搜索到要验证用户的DN值(ldap搜索到的单 ...
- Java学习:Properties类
Java学习:Properties类 学习目标 认识properties文件,理解其含义,会正确创建properties文件. 会使用java.util.Properties类来操作propertie ...
- spring根据beanName获取bean
spring根据beanName获取bean主要实现: org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean( ...
- 基于vue+springboot+docker网站搭建【一】 前言
前言 开一个系列记录下一次从0开始搭建一个网站的过程.前后端项目都是在github找的开源项目,主要用于练习部署. 前端:vue.js 后端: spring-boot 搭建环境:centOS7.6 ...
- http 307重定向
刚才在做hexo页面优化,发现了本地测试返回http 307.以前没见过这个响应码,于是做一下调研. 相关文章: hexo页面优化 http 307 在rfc规范中,http 307 Temporar ...