BZOJ3755 : Pty爬山
l[i],r[i]表示站在i点往左往右走能看到的最高峰,用栈维护凸壳求出
h[i]表示i点能看到的最高峰的高度
a[i],b[i]表示i点往左往右走时反悔的点,即第一个h[j]>h[i]的j,用单调栈求出
然后建树DFS一遍求出答案
#include<cstdio>
#define N 200010
typedef long long ll;
int n,i,x[N],y[N],l[N],r[N],q[N],a[N],b[N],t,g[N],nxt[N],v[N],ed,d[N],f[N];ll Y[N],h[N];
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline void add(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
inline int abs(int x){return x>0?x:-x;}
void dfs(int x){for(int i=g[x];i;i=nxt[i])f[v[i]]=f[x]+abs(x-v[i]),dfs(v[i]);}
int main(){
read(n);
for(y[0]=y[n+1]=-1,i=1;i<=n;i++)read(x[i]),read(y[i]),Y[i]=1000000LL*y[i]+i;
for(q[t=0]=n,i=n-1;i;q[++t]=i--){
while(t&&(ll)(y[q[t]]-y[i])*(x[q[t-1]]-x[q[t]])<=(ll)(y[q[t-1]]-y[q[t]])*(x[q[t]]-x[i]))t--;
r[i]=q[t];
}
for(q[t=0]=1,i=2;i<=n;q[++t]=i++){
while(t&&(ll)(y[q[t]]-y[i])*(x[q[t-1]]-x[q[t]])>=(ll)(y[q[t-1]]-y[q[t]])*(x[q[t]]-x[i]))t--;
l[i]=q[t];
}
for(i=1;i<=n;i++){
if(Y[i]>Y[l[i]])l[i]=0;
if(Y[i]>Y[r[i]])r[i]=n+1;
h[i]=Y[i];
if(Y[l[i]]>h[i])h[i]=Y[l[i]],d[i]=1;
if(Y[r[i]]>h[i])h[i]=Y[r[i]],d[i]=2;
}
h[0]=h[n+1]=1LL<<60;
for(q[t=0]=0,i=1;i<=n;q[++t]=i++){
while(h[i]>h[q[t]])t--;
a[i]=q[t]>l[i]?q[t]:l[i];
}
for(q[t=0]=n+1,i=n;i;q[++t]=i--){
while(h[i]>h[q[t]])t--;
b[i]=q[t]<r[i]?q[t]:r[i];
}
for(i=1;i<=n;i++){
if(!d[i])t=i;
if(d[i]==1)add(a[i],i);
if(d[i]==2)add(b[i],i);
}
for(dfs(t),i=1;i<=n;i++)printf("%d\n",f[i]);
return 0;
}
BZOJ3755 : Pty爬山的更多相关文章
- GDOI2014模拟pty爬山(mountain)
pty爬山(mountain) 在Pty学校附近,有一座名之为岳之麓的高山.Pty很喜欢和(哔--)一起爬山.山的平面模型如下:山由一个顶点集:A1,A2-An给定,保证Ai的x单调递增.我们将Ai和 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- bzoj3756: Pty的字符串
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- tty & pty & pts
[tty & pty & pts] 基本概念: 1> tty(终端设备的统称):tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过 ...
- POJ 2420 A Star not a Tree? 爬山算法
B - A Star not a Tree? Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/co ...
- (从终端看linux-1)linux tty pty pts 概念 区别
基本概念: 1> tty(终端设备的统称):tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东 ...
- Linux中的终端、控制台、tty、pty等概念
参考:http://news.newhua.com/news1/program_language/2010/623/10623141048745773199BCF0CFH6AKB9930IGCFKHB ...
- Linux中tty、pty、pts的概念区别
转自Linux中tty.pty.pts的概念区别 基本概念: 1> tty(终端设备的统称): tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过 ...
- tty、pty、pts等(小记)
http://blog.csdn.net/dbzhang800/article/details/6939742 1> tty(终端设备的统称):tty一词源于Teletypes,或者telety ...
随机推荐
- HDU 1176免费馅饼 DP数塔问题转化
L - 免费馅饼 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- ubuntu14.04安装dropbox
官网地址: https://www.dropbox.com/install?os=lnx 自己的系统如果没有设置全局翻(qiang)代理,使用deb文件安装后不能直接使用,因为还需要到官网安装prop ...
- shell脚本批量生成配置文件
如果管理的站点和服务器较多的情况下,每次修改配置文件都相当痛苦.因而想到了用shell脚本来批量生成配置文件和配置数据.下面这个脚本是为了批量生成nagios监控配置文件的一个shell脚本程序.其原 ...
- xcode 和 android studio中在Mac系统下的自动对齐快捷键
这个快捷键太常用了,又总忘记,记录下. xcode ctrl+i android studio win+alt+L
- Java for LeetCode 187 Repeated DNA Sequences
All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...
- July 12th, Week 29th Tuesday, 2016
When the traveler goes alone he gets acquainted with himself. 独自旅行可以让人更好地了解自己. With other's company, ...
- IE的安全性设定增加“我的电脑”的安全性设定
HKEY_CURRE-NT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\Zones\,在右边窗口中找到DWORD值“ ...
- Unix系统编程_cha11.6_线程同步
#include <stdio.h>#include <pthread.h>#include <stdlib.h> #define NHASH 29#define ...
- CentOS 6.5 下安装 Elasticsearch 5
安装最新的 Elasticsearch 5 需要Java 8.所有先要确定环境中是否有Java 8.如果没有则需要安装. 1. 安装Java 8 首先使用 yum list installed | g ...
- Linux查询网址
1.man查询手册 LINUX MAN PAGES ONLINE: http://man.he.net/ 2.编码规范 https://www.kernel.org/doc/Documentation ...