BZOJ4970 IOI2004 empodia障碍段
4970: [ioi2004]empodia 障碍段
Time Limit: 10 Sec Memory Limit: 128 MB
Description
Input
Output
Sample Input
0
3
5
4
6
Sample Output
2 5
#include <map>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define rg register
#define FILE "empodia"
using namespace std; const int N = ;
int n,A[N],sta[N],nxt_1[N],nxt_2[N],Ans,bin[N<<],R[N];
vector<int>G[N]; inline int gi(){
rg int x=,res=;rg char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')res^=;ch=getchar();}
while(ch>=''&&ch<='')x=x*+ch-,ch=getchar();
return res?x:-x;
} inline void link(int u,int v){
G[u].push_back(v);
} inline void getnxt_1(rg int tp=){
sta[]=n+;
for(rg int i=n;i>=;--i){
while(tp && A[sta[tp]]<A[i])tp--;
nxt_1[i]=sta[tp];sta[++tp]=i;
link(nxt_1[i],i);
}
} inline void getnxt_2(rg int tp=){
sta[]=n+;
for(rg int i=n;i>=;--i){
while(tp && A[sta[tp]]>A[i])tp--;
nxt_2[i]=sta[tp];sta[++tp]=i;
}
} inline void dfs(int x){
int g=A[x],qt=bin[g];
if(bin[g]<=nxt_2[x])R[x]=bin[g];
bin[g]=x;
for(int i=,j=G[x].size();i<j;i++)
dfs(G[x][i]);
bin[g]=qt;
} int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
n=gi();memset(bin,,sizeof(bin));
for(rg int i=;i<=n;++i)A[i]=gi()+;
getnxt_1();getnxt_2();
memset(R,,sizeof(R));
for(int i=;i<=n;++i)A[i]=A[i]-i+n;
dfs(n);
for(int i=n,Mx=R[];i>=;--i){
if(R[i]>Mx)R[i]=R[];
Mx=min(Mx,R[i]);
}
for(int i=;i<=n;++i)if(R[i]<=n)Ans++;
printf("%d\n",Ans);
for(int i=;i<=n;++i)
if(R[i]<=n)printf("%d %d\n",i,R[i]);
fclose(stdin);fclose(stdout);
return ;
}
障碍段
BZOJ4970 IOI2004 empodia障碍段的更多相关文章
- BZOJ4970 : [ioi2004]empodia 障碍段
通过两遍单调栈求出每个点作为最小值往右延伸到$g[i]$,作为最大值往左延伸到$f[i]$. 那么一个区间$[i,j]$可行当且仅当$g[i]\geq j$.$f[j]\leq i$且$i-a[i]= ...
- CF954F Runner's Problem(动态规划,矩阵快速幂)
CF954F Runner's Problem(动态规划,矩阵快速幂) 题面 CodeForces 翻译: 有一个\(3\times M\)的田野 一开始你在\((1,2)\)位置 如果你在\((i, ...
- 本地管理表空间(LMT)与自动段空间管理(ASSM)概念
创建表空间时,extent management local 定义本地管理表空间(LMT),segment space management auto 定义自动段空间管理(ASSM). extent ...
- 进阶篇:2.1)DFMA实施障碍和关键
本章目的:了解DFMA实施障碍与关键. 1.实施的障碍 面向制造和装配的产品开发能够降低产品成本.提高产品质量.缩短产品开发周期,但是,由于传统产品开发思想和各种条件的限制,实施面向制造和装配的产品开 ...
- 跨越语言的障碍:C++/CLI 调用 C#
首先我想投诉一下博客园首页右边栏的广告..最近总是出现很恐怖的整容脸的广告.真的是吓坏了.=.=大家有同感吗? 博客园前一阵子掀起了语言的广泛讨论,事实上语言的争执在整个程序员圈子也没有停止过.以我个 ...
- mysql向表中某字段后追加一段字符串:
mysql向表中某字段后追加一段字符串:update table_name set field=CONCAT(field,'',str) mysql 向表中某字段前加字符串update table_n ...
- WPF自定义RoutedEvent事件代码段
今天在写东西的时候,发现常用的代码段里没有RoutedEvent的,因此,写了一个代码段,方便以后使用,顺便记录一下,如何做代码段. 1.在项目中新建一个XML文件,将扩展名修改为snippet. 2 ...
- mssql 字增自段怎样重置(重新自增)|清空表已有数据
方法1 -- 清空已有数据,并且将自增自段恢复从1开始计数 truncate table 表名 方法2 -- 不清空已有数据,但将自增自段恢复从1开始计数 dbcc checkident(表名,RES ...
- u-boot源码分析之C语言段
题外话: 最近一直在学习u-boot的源代码,从代码量到代码风格,都让我认识到什么才是真正的程序.以往我所学到的C语言知识和u-boot的源代码相比,实在不值一提.说到底,机器都是0和1控制的.感觉这 ...
随机推荐
- css实现六边形图片(最简单易懂方法实现高逼格图片展示)
不说别的,先上效果: 用简单的div配合伪元素,即可‘画出’这幅六边形图片,原理是三个相同宽高的div,通过定位旋转拼合成一个六边形,再利用背景图层叠,形成视觉上的一张整图.下面咱们一步一步来实现. ...
- Less命名空间
Less命名空间 当我们拥有了大量选择器的时候,特别是团队协同开发时,如何保证选择器之间重名问题?如果你是 java 程序员或 C++ 程序员,我猜你肯定会想到命名空间 Namespaces. Les ...
- azure上连续部署web
连续部署web 连续部署web,可以在第一次部署完web应用后,方便修改和自动提交代码部署新版本的web应用.其中自动提交使用github中的webhook,使代码在master上提交修改后可以自 ...
- Numpy数组对象的操作-索引机制、切片和迭代方法
前几篇博文我写了数组创建和数据运算,现在我们就来看一下数组对象的操作方法.使用索引和切片的方法选择元素,还有如何数组的迭代方法. 一.索引机制 1.一维数组 In [1]: a = np.arange ...
- bootstarp-fileinput上传 火狐防止拖入文件直接打开新页面
今日接触了一个bootstarp的上传插件,发现其功能很强大,具体名为bootstarp-fileinput,需要的可以自行度一下. 然后当使用其拖拽功能时,其他浏览器没出毛病,独火狐浏览器拖入时直接 ...
- UVA434 - Matty's Blocks
题意:已知前视图和右视图,求最少需要几个正方体以及至多可以再增加几个正方体. 分析:先对于最小木块数,要想用最少的立方体搭建,那就意味着前视图中的每一竖立方体的高度最好都要被右视图中的高度所利用到.所 ...
- Azure ARM (18) 将传统的ASM VM迁移到ARM VM (1)
<Windows Azure Platform 系列文章目录> 目前很多客户陆续的把传统ASM VM迁移至ARM VM.我这里简单介绍一下. 整个迁移过程分为: 1.Validate,Az ...
- 让你变懒的 Android Studio Live Templates
俗话说.不想偷懒的程序猿不是好程序猿.那么今天就教大家偷懒下! 先举个样例.我们在 Android 开发中输入 Toast ,然后会有例如以下例如以下的高速操作: 是不是非常方便? 有同学问,这不就是 ...
- 《iOS Human Interface Guidelines》——Multitasking
多任务处理 多任务处理让人们在屏幕上(以及合适的iPad模式)查看多个app,而且在近期使用的app中高速地切换. 在iOS 9中.人们能够使用多任务处理UI(例如以下所看到的)来选择一个近期使用的a ...
- 微信公众号开发系列-获取微信OpenID
在微信开发时候在做消息接口交互的时候须要使用带微信加密ID(OpenId),下面讲讲述2中类型方式获取微信OpenID.接收事件推送方式和网页授权获取用户基本信息方式获取. 1.通过接收被动消息方式获 ...