背景

星光闪耀--深蓝色空间
听说过他们的语言
沉默

他们称赞深相互

描写叙述

繁星, 漫天的繁星.
繁星排成一列, 我数一数呀, 一共同拥有N仅仅小星星呢.

星星们是听话的好孩子, 小岛在指挥它们跳舞呢.
舞蹈開始前, 它们都亮了起来!

小岛指一指第i仅仅小星星, 仅仅见第i仅仅小星星立马改变了自己的状态.
假设它之前是亮着的, 那么立马就灭掉了.
假设它之前是灭掉的, 如今就立马亮了呀!

假设说, 能够有连续若干仅仅小星星.
当中随意相邻两仅仅星星状态不同.
那就是最美的了.

小岛希望知道:
每一次发出指令之后
能找到最长的连续小星星, 满足上述需求的
有多长?

格式

输入格式

第一行有两个整数, 分别为星星总数N, 和指令总数Q.
1<=N<=200,000; 1<=Q<=200,000.
之后Q行, 每行有一个整数i: 1<=i<=N, 表示小岛发出的指令.

输出格式

输出有Q行, 当中每i行有一个整数.
表示小岛的第i条指令发出之后, 能够找到的满足要求的最长连续星星序列有多长?

例子1

例子输入1[复制]

6 2
2
4

例子输出1[复制]

3
5

限制

对于20%的数据: N, Q <= 100.
对于30%的数据: N, Q <= 70000.
对于100%的数据: 1 <= N, Q <= 200,000.

提示

对于例子, 星星序列的状态依次为: OOOOOO -> OXOOOO -> OXOXOO
这里用O表示亮着的星星, 用X表示灭掉的星星.

线段树维护每段区间里的从左边第一个往右能延伸的最大长度,从右边最后一个往左能延伸的最大长度。还有中间的最大长度。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <queue>
#include <algorithm>
#define mem(f) memset(f,0,sizeof(f))
#define M 100005
#define mod 1000000007
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
using namespace std;
typedef long long LL;
const int MAX = 0x3f3f3f3f;
const int maxn = 200005;int mx_three(int a, int b, int c) {return max(a, max(b, c));
}int n, q, c, b[maxn];
struct C {int mx, lx, rx;
} a[maxn<<2];void build(int o, int l, int r) {a[o].lx = a[o].mx = a[o].rx = 1;if(l == r) return;int m = (l+r) >> 1;build(lson);build(rson);
}void update(int o, int l, int r) {if(l == r) {b[c] ^= 1;return;}int m = (l+r) >> 1;if(c <= m) update(lson);else update(rson);int len = r-l+1, L = o<<1, R = o<<1|1;a[o].lx = a[L].lx;a[o].rx = a[R].rx;if(b[m] != b[m+1]) {a[o].mx = mx_three(a[L].mx, a[R].mx, a[L].rx+a[R].lx);if(a[o].lx == len-(len>>1)) a[o].lx += a[R].lx;if(a[o].rx == len>>1) a[o].rx += a[L].rx;} else a[o].mx = max(a[L].mx, a[R].mx);
}int main()
{scanf("%d%d", &n, &q);build(1, 1, n);while(q--) {scanf("%d", &c);update(1, 1, n);printf("%d\n", a[1].mx);}return 0;
}


转载于:https://www.cnblogs.com/blfshiye/p/5044678.html

Vijos P1881 闪烁的星星相关推荐

  1. Linux操作系统下,在终端打印出闪烁的星星图案

    Linux系统下,在终端打印出闪烁的星星图案. 一.首先需要耐心,使用输出语句先"弄"出一个星星图案 (我是为了打印出来的星星是在终端中间,所以这样子敲的,可根据自己想法完成) 二 ...

  2. OpenGL_Qt学习笔记之_07(闪烁的星星)

    OpenGL_Qt学习笔记之_07(闪烁的星星) 这一小节我们要完成的任务是:将一张背景是黑色,中间是白亮色的星星图片和五颜六色的颜色进行色彩融合,变成一颗彩色的星星.并且让这些星星自转和公转,可以控 ...

  3. java随机星星怎么闪_canvas画随机闪烁的星星

    canvas画一颗星星: 规则的星星有内切圆和外切圆,每两个点之间的角度是固定的,因此可得到星星的每个点的坐标,画出星星. function drawStars(x,y,radius1,radius2 ...

  4. html5实例-闪烁的星星

    一.绘制五角星 1.1页面结构 <!DOCTYPE html> <html><head><meta charset="UTF-8"> ...

  5. 闪烁的星星(Nehe)

    以下代码演示与Nehe教程第九课中一样的效果.第十课中三维的暂不实现.主要使用纹理贴图相关方面知识. WStar.h #pragma once #include <QtOpenGL/QtOpen ...

  6. 夜空中星星闪动html,夜空中的星星为什么会一直闪烁?

    这是一个很棒的问题,事实上,这个问题的答案就在我们身边. 你曾在极其炎热的一天外出的经历吗?在热到冰淇凌都会融化在手里那种天气,你也许会注意到一个奇怪的事情,地平线附近的树木有点摇晃或者有点模糊,当我 ...

  7. VIJOS国庆节模拟赛之繁星春水

    1 P1881 闪烁的繁星 分治,维护几个结果即可. #include <cstdio> #include <iostream> using namespace std;con ...

  8. 生日快乐模板php,HTML5应用-生日快乐动画之实现星星的示例代码分享

    在讲述绘制星星动画之前,先介绍一点javascript知识. 面向对象: javascript本质上不是面向对象语言,而是脚本语言,一般只适合简单.代码量少的程序,因为脚本过于复杂会直接导致浏览器出现 ...

  9. css3实现星星闪烁效果

    2019独角兽企业重金招聘Python工程师标准>>> 素材: <!DOCTYPE html> <html lang="en"><h ...

最新文章

  1. Python深浅拷贝教程-面试必问内容
  2. memc_nginx+srcache_nginx+memcached构建透明的动态页面缓存
  3. P3373 【模板】线段树 2(区间乘法+区间加法+区间求和)
  4. 精妙的SQL语句收藏
  5. linux下camera驱动分析_LINUX设备驱动模型分析之三 驱动模块相关(DRIVER)接口分析...
  6. nginx 反向代理到目录
  7. 启用Windows 功能NetFx3时出错,错误代码:-2146498298
  8. ppc+安装编译mysql_redhat7ppc安装
  9. Google Earth Browser Plugin (谷歌 地球 浏览器 插件) 下载地址 5.0
  10. VBlog 纯前端博客 2018.5.15更新
  11. SDCC 的源码安装
  12. 嗅探服务器系统,嗅探服务器
  13. SWUST OJ#480 Locker doors
  14. linux做gpt分区,Linux下的GPT分区
  15. 佳明比华为的手表好在哪
  16. Windows打印管理解决方案
  17. day13-面向对象进阶
  18. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛非官方题解
  19. then 微信小程序_微信小程序异步处理
  20. Android 11.0 蓝牙去掉传输文件的功能

热门文章

  1. M1 mac使用UTM安装kali linux
  2. SQL 实验项目7_数据库设计
  3. vue打包遇到的UglifyJs问题
  4. python模拟生成真实的电话号码 / 姓名
  5. 服务器支持电脑硬盘吗,服务器硬盘和普通硬盘有什么区别?服务器硬盘和普通硬盘区别对比评测...
  6. shell 遍历文件循环每一行操作
  7. 程序员 的 编程格言 (中英)
  8. 正定矩阵、负定矩阵、半正定矩阵、半负定矩阵
  9. 来看看中国计算机视觉行业发展有什么动态?
  10. Oracle中创建,删除同义词 Synonym