[COCI2010-2011#6] STEP
题目大意
维护一个 \(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的更多相关文章
- Step by step Dynamics CRM 2011升级到Dynamics CRM 2013
原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...
- [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 ...
- Step by Step
数据库设计Step by Step篇目整理及下载地址 系列篇目 1. 数据库设计 Step by Step (1)——扬帆启航 2. 数据库设计 Step by Step (2)——数据库生命周期 3 ...
- Error 18000 during outlook 2011 rebuild
Thanks Rob 88 Via:https://discussions.apple.com/message/23726703#23726703 1. Make a duplicate copy o ...
- MS CRM 2011的自定义和开发(11)——插件(plugin)开发(三)
http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2340661.html MS CRM 2011的自定义和开发(11)——插件(plugin ...
- WinForm RDLC SubReport Step by step
最近在做的一个PO管理系统,因为要用到订单打印,没有用水晶报表,直接使用VS2010的Reporting.参考了网上的一些文章,但因为找到的数据是用于WebForm的,适配到WinForm有点区别,竟 ...
- [SinGuLaRiTy] COCI 2011~2012 #2
[SinGuLaRiTy-1008] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 测试题目 对于所有的题目:Time Limit:1s ...
- 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 ...
- 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 ...
- NOIP 2011 Day 1
NOIP 2011 Day 1 tags: NOIP 搜索 categories: 信息学竞赛 总结 铺地毯 选择客栈 Mayan游戏 铺地毯 Solution 因为只会询问一个点被谁覆盖, 而且后面 ...
随机推荐
- java 常用的jar包下载地址
Eclipse: http://www.eclipse.org/downloads/packages/all Spring: http://Framework: http://repo.spring. ...
- 批量将多个相同Excel表格内容合并到一个Excel表格的sheet工作簿当中。
Sub Books2Sheets()Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogFilePicker) Dim ...
- @ApiImplicitParams注解的详细使用
一.@ApiImplicitParams注解的详细使用 业务需求: 1.根据服务员类别id(单个id)+服务员星级id(id的list)查询对应的服务员列表 1.controller代码: 点击查看代 ...
- 前端h5适配刘海屏和滴水屏
前端适配苹果刘海屏,安卓刘海屏水滴瓶 其实w3c早就为我们提供了解决方法(CSS3新特性viewport-fit) 在w3c.org官方给出的关于圆形展示(Round display)的标准中, 提到 ...
- JavaScript:对象:对象和属性的内存结构是什么样的?
在说变量的时候,大致画了变量的内存结构,现在来看一下对象的内存结构是什么样的,有助于我们理解传参的各种情况,只是大致的画一下内存模型,不代表实际内存情况. 我们可以用一段代码,来判断一下,是不是这样的 ...
- sql根据团队树一级一级汇总统计
1.需求描述 最近碰到了一个需求,是要统计各个团队的员工的销售金额,然后一级一级向上汇总. 编辑 架构团队树是类似于这种样子的,需要先算出每个员工的销售金额,然后汇总成上一级的团队金额,然后各个 ...
- Atcoder Beginner Contest ABC 284 Ex Count Unlabeled Graphs 题解 (Polya定理)
题目链接 弱化版(其实完全一样) u1s1,洛谷上这题的第一个题解写得很不错,可以参考 直接边讲Polya定理边做这题 问题引入:n颗珠子组成的手串,每颗珠子有两种不同的颜色, 如果两个手串能够在旋转 ...
- cmd/批处理常用命令
启动新窗口执行命令 ::执行完毕以后,新开的窗口不会自动关闭 start cmd /k echo 123 ::执行完毕以后,新开的窗口会自动关闭 start cmd /C "echo 123 ...
- P7368 [USACO05NOV]Asteroids G
题面 贝茜想在 \(N\times N\) 的网格中驾驶她的宇宙飞船.网格中有 \(K\) 个小行星.要使驾驶过程愉快,就必须把这些小行星全部消除. 贝茜有一个武器,可以以一个单位代价消除一行或一列的 ...
- xcode运行sh权限问题
Showing Recent Messages Command /bin/sh emitted errors but did not return a nonzero exit code to ind ...