题目大意

维护一个 \(01\) 序列最长的连续相邻两个数不同的子序列的长度

解析

很裸的线段树题。。。

要维护的信息很多

  • 区间长度
  • 区间最左端点
  • 区间最右端点
  • 区间最长前缀
  • 区间最长后缀
  • 区间最终的答案

    前三个直接从左右儿子获取即可

区间最长前缀先为左儿子的区间最长前缀

如果左儿子的区间最长前缀为左区间的长度,那么考虑它能不能和右儿子拼接,更新答案

右区间最长前缀同理

最终答案是 左儿子的最终答案,右儿子的最终答案,左儿子和右儿子能否拼接的答案,本区间的最长前缀,本区间的最长后缀 中的最大值

于是你明白了为什么要维护辣么多东西

\(Code\)

#include<cstdio>
#include<iostream>
#define ls (k << 1)
#define rs (ls | 1)
using namespace std; const int N = 2e5 + 5;
int n , q; struct segment{
int len , l , r , p , s , v;
}seg[N << 2]; inline void pushup(int k)
{
seg[k].l = seg[ls].l , seg[k].r = seg[rs].r;
seg[k].len = seg[ls].len + seg[rs].len;
seg[k].p = seg[ls].p;
if (seg[ls].p == seg[ls].len && seg[ls].r ^ seg[rs].l) seg[k].p = seg[ls].p + seg[rs].p;
seg[k].s = seg[rs].s;
if (seg[rs].s == seg[rs].len && seg[ls].r ^ seg[rs].l) seg[k].s = seg[rs].s + seg[ls].s;
seg[k].v = (max(seg[k].p , seg[k].s) , max(seg[ls].v , seg[rs].v));
if (seg[ls].r ^ seg[rs].l) seg[k].v = max(seg[k].v , seg[ls].s + seg[rs].p);
} inline void build(int l , int r , int k)
{
if (l == r)
{
seg[k].l = seg[k].r = 0;
seg[k].len = seg[k].p = seg[k].s = seg[k].v = 1;
return;
}
int mid = (l + r) >> 1;
build(l , mid , ls) , build(mid + 1 , r , rs);
pushup(k);
} inline void update(int x , int l , int r , int k)
{
if (l == r && l == x)
{
seg[k].l = seg[k].r = seg[k].l ^ 1;
return;
}
int mid = (l + r) >> 1;
if (x <= mid) update(x , l , mid , ls);
else update(x , mid + 1 , r , rs);
pushup(k);
} int main()
{
scanf("%d%d" , &n , &q);
build(1 , n , 1);
int x;
for(; q; q--)
{
scanf("%d" , &x);
update(x , 1 , n , 1);
printf("%d\n" , seg[1].v);
}
}

[COCI2010-2011#6] STEP的更多相关文章

  1. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013

    原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...

  2. [ZZ] Understanding 3D rendering step by step with 3DMark11 - BeHardware >> Graphics cards

    http://www.behardware.com/art/lire/845/ --> Understanding 3D rendering step by step with 3DMark11 ...

  3. Step by Step

    数据库设计Step by Step篇目整理及下载地址 系列篇目 1. 数据库设计 Step by Step (1)——扬帆启航 2. 数据库设计 Step by Step (2)——数据库生命周期 3 ...

  4. Error 18000 during outlook 2011 rebuild

    Thanks Rob 88 Via:https://discussions.apple.com/message/23726703#23726703 1. Make a duplicate copy o ...

  5. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(三)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2340661.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  6. WinForm RDLC SubReport Step by step

    最近在做的一个PO管理系统,因为要用到订单打印,没有用水晶报表,直接使用VS2010的Reporting.参考了网上的一些文章,但因为找到的数据是用于WebForm的,适配到WinForm有点区别,竟 ...

  7. [SinGuLaRiTy] COCI 2011~2012 #2

    [SinGuLaRiTy-1008] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 测试题目 对于所有的题目:Time Limit:1s   ...

  8. Step by step guide to set up master and slave machines on Windows

    Note: There is no need to install Jenkins on the slave machine. On your master machine go to Manage ...

  9. Quest for sane signals in Qt - step 1 (hand coding a Q_OBJECT)

    探索qt的信号ref: http://crazyeddiecpp.blogspot.hk/2011/01/quest-for-sane-signals-in-qt-step-1.html If it ...

  10. NOIP 2011 Day 1

    NOIP 2011 Day 1 tags: NOIP 搜索 categories: 信息学竞赛 总结 铺地毯 选择客栈 Mayan游戏 铺地毯 Solution 因为只会询问一个点被谁覆盖, 而且后面 ...

随机推荐

  1. 1. scrapy 框架应该怎么学习(前言)

    其实 scrapy 框架并不难学习, 我觉得分为两部分: 命令 和 代码逻辑的构建 1. 如何学习命令 其实 scrapy 已经帮我们做好了很充足的说明了, 下面我来说如何好好利用这些说明 scrap ...

  2. 关于 Windows6.1-KB2999226-x64.msu 此更新不适用你的计算机解决办法

    前言 今天被这个破问题坑了很长时间,网上一大堆扯跳过那个检查,通过提取 cab 文件然后直接用命令安装,我可以明确的告诉你不是那样的解决的,因为我实际用命令装过也装不上(这里我吐槽一下,我猜你最初的问 ...

  3. MySQL进阶实战3,mysql索引详解,上篇

    一.索引 索引是存储引擎用于快速查找记录的一种数据结构.我觉得数据库中最重要的知识点,就是索引. 存储引擎以不同的方式使用B-Tree索引,性能也各有不同,各有优劣.例如MyISAM使用前缀压缩技术使 ...

  4. 4.4:Sqoop数据导入实验

    〇.概述 1.拓扑结构 2.目标 使用sqoop工具将数据从mysql数据库导入到HDFS和Hbase 一.配置免密登录hdfs 三.导入到hdfs中 sqoop import --connect j ...

  5. 【大数据-课程】高途-天翼云侯圣文-Day1:互联网大数据揭秘(大数据介绍&MR实现双十一举牌)

    一.大厂职级 P7:年薪百万 二.大数据发展 1.职业路线和岗位角色 2.大数据行业发展 三.大数据的位置 1.热门行业 大数据承上启下 2.三者关系 啤酒和尿不湿:启发可以放在一块 3.大数据作用 ...

  6. Scrum敏捷开发方法实践

    前言   作者所在的公司在项目开发的过程中采用着当下互联网公司中流行的小步快跑开发策略,特别借鉴了敏捷开发中的迭代递增思想来指导项目的开发.我们经过对相关敏捷开发方法的调查研究,最终采用了Scrum敏 ...

  7. 甜点cc的2022年回顾总结

    每每到年底,总会感概时间飞逝,总会莫名的心慌几天. 高中时代我就明白了一个道理:自己决定做的事,就算结果再烂以后也不要后悔,因为那无异于否定过去的自己.人不能总是否定自己的过去,因为我觉得这样会打击自 ...

  8. Python实验报告(第10章)

    实验10:文件及目录操作 一.实验目的和要求 1.掌握基本文件操作(创建.打开.关闭.写入): 2.掌握目录操作的基本操作(创建.删除.遍历): 3.了解高级文件操作(删除文件.获取文件基本信息). ...

  9. 学习ASP.NET Core Blazor编程系列十九——文件上传(下)

    学习ASP.NET Core Blazor编程系列文章之目录 学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应 ...

  10. 蚂蚁感冒【第五届蓝桥杯省赛C++A/B组】

    蚂蚁感冒 长 \(100\) 厘米的细长直杆子上有 \(n\) 只蚂蚁. 它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是 1 厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方 ...