UVA6531Go up the ultras
这题意甚是难懂。。当且峰值为h 如果他能为ultras 需要满足条件 d>=15W d满足它到任意一个比它高的点须经过h-d这个点
通俗一点来说,如果这个点满足条件 就找离他最近的一个<=h-15W的点 看他们之间是否有比它更高的点 如果没有的话 它就满足条件 需要左右两边找。
用线段树依次插入点值 位置为节点值 更新最大值及最小值。
需要离散化 卡时间。。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<cmath>
using namespace std;
#define N 1000010
#define M 100010
int s[N<<],ss[N<<];
int h[M],o[M],n,p[N],hi[M<<];
bool f[M],ff[N];
void update(int oo,int p,int d,int l,int r,int w)
{
if(l==r)
{
if(oo)
s[w] = d;
else
ss[w] = d;
return ;
}
int m = (l+r)>>;
if(p<=m)
update(oo,p,d,l,m,w<<);
else
update(oo,p,d,m+,r,w<<|);
if(oo)
s[w] = max(s[w<<],s[w<<|]);
else
ss[w] = min(ss[w<<],ss[w<<|]);
}
int query(int oo,int a,int b,int l,int r,int w)
{
if(a<=l&&b>=r)
{
if(oo)
return s[w];
else
return ss[w];
}
int m = (l+r)>>,re;
if(oo)
{
re = ;
if(a<=m)
re = query(oo,a,b,l,m,w<<);
if(b>m)
re = max(re,query(oo,a,b,m+,r,w<<|));
}
else
{
re = n+;
if(a<=m)
re = query(oo,a,b,l,m,w<<);
if(b>m)
re = min(re,query(oo,a,b,m+,r,w<<|));
}
return re;
}
void build(int l,int r,int w,int oo)
{
if(l==r)
{ if(oo)
s[w] = ;
else
ss[w] = n+;
return ;
}
int m = (l+r)>>;
build(l,m,w<<,oo);
build(m+,r,w<<|,oo);
if(oo)
s[w] = max(s[w<<],s[w<<|]);
else
ss[w] = min(ss[w<<],ss[w<<|]);
}
int main()
{
int i;
int hh = ,num=;
while(scanf("%d",&n)!=EOF)
{
memset(f,,sizeof(f));
memset(ff,,sizeof(ff));
int mm = ,e = ;
for(i = ; i <= n ;i++)
{
scanf("%d",&h[i]);
if(!ff[h[i]])
{
hi[e++] = h[i];
ff[h[i]] = ;
}
if(h[i]>hh)
{
if(!ff[h[i]-hh])
hi[e++] = h[i]-hh;
ff[h[i]-hh] = ;
}
}
sort(hi,hi+e);
int ko = ;
for(i = ;i < e; i++)
{
p[hi[i]] = ++ko;
}
mm = ko+;
build(,mm,,);
update(,,,,mm,);
for(i = ; i < n ;i++)
{
if(h[i]<=hh)
{
update(,p[h[i]],i,,mm,);
continue;
}
if(h[i]>=h[i-]&&h[i]>=h[i+])
{
f[i] = ;
int k1 = query(,,p[h[i]-hh],,mm,);
int k2 = query(,p[h[i]]+,mm,,mm,);
if(k2)
{
if(!k1||k2>k1)
f[i] = ;
}
}
update(,p[h[i]],i,,mm,);
}
build(,mm,,);
update(,,n,,mm,);
for(i = n-; i >= ; i--)
{
if(f[i])
{
int k1 = query(,,p[h[i]-hh],,mm,);
int k2 = query(,p[h[i]]+,mm,,mm,);
if(k2!=n+)
{
if(k1==n+||k2<k1)
f[i] = ;
}
}
update(,p[h[i]],i,,mm,);
}
int g = ;
for(i = ; i <= n; i++)
if(f[i])
o[++g] = i;
for(i = ; i < g; i++)
printf("%d ",o[i]);
printf("%d\n",o[i]);
}
return ;
}
/*
26
0 50000 150000 200000 150000
200000 300000 100000 50000 150000 330000 350000
250000 350000 200000 220000 300000 50000 100000
250000 100000 150000 500000 300000 250000 0
*/
UVA6531Go up the ultras的更多相关文章
- UVALive 6531 Go up the ultras 单调栈+RMQ
题目链接:点击打开链接 题意: 给定n座山 以下n个数字表示n座山的高度 若这座山u合法,则要满足: 1.若u的左边存在比u高的山,设v是u左边距离u近期的且严格比u高的山,在[v,u]之间至少有一座 ...
- The 2013 South America/Brazil Regional Contest 题解
A: UVALive 6525 cid=61196#problem/A" style="color:blue; text-decoration:none">Atta ...
- 2008 SCI 影响因子(Impact Factor)
2008 SCI 影响因子(Impact Factor) Excel download 期刊名缩写 影响因子 ISSN号 CA-CANCER J CLIN 74.575 0007-9235 NEW E ...
- Image Processing and Analysis_8_Edge Detection:Edge and line oriented contour detection State of the art ——2011
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
随机推荐
- Android上的水果忍者刀锋效果(JAVA实现)
显示刀锋的View package com.wbhuang.myninjia; import java.util.ArrayList; import java.util.List; import an ...
- POJ1860 Currency Exchange —— spfa求正环
题目链接:http://poj.org/problem?id=1860 Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Tota ...
- Spring Boot2.0之 整合Redis集群
项目目录结构: pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...
- WPF 之Converter
WPF 之Converter Leo 在我们做项目的时候,经常会遇见这样的事情: 在数据中我们定义的是true,false 而在现实的时候则可能要求男,女 我们还得能定义成了0,1,2,3,4,5, ...
- 二维码解码器Zbar+VS2012开发环境配置
Zbar条码解码器是一个开源的二维码(包括条形码)解码器,可以识别来至于视频流,图像文件.手持扫码器和视频设备(如摄像头)等二维码识别,支持EAN-13/UPC-A, UPC-E, EAN-8, Co ...
- (转)Excel自定义格式详解
”G/通用格式”:以常规的数字显示,相当于”分类”列表中的”常规”选项.例:代码:”G/通用格式”.10显示为10:10.1显示为10.1. 2. “#”:数字占位符.只显有意义的零而不显示无意义的零 ...
- 【转】创建和使用ANDROID LIBRARY工程
原文网址:http://www.cnblogs.com/Greenwood/archive/2011/06/19/2084499.html 摘要: 创建library供多个工程共享代码.资源是非常常见 ...
- CoreOS,CoreOS,一款 Linux 容器发行版
CoreOS,一款最新的 Linux 发行版本,支持自动升级内核软件,提供各集群间配置的完全控制. 关于使用哪个版本的 Linux 服务器系统的争论,常常是以这样的话题开始的: 你是喜欢基于 Red ...
- bzoj2384
树状数组+KMP 匹配问题上KMP 但是问题在于如何判断两个位置相等,我们认为如果一个位置之前比他小的数数量相同那么就是相等. 那么我们用树状数组动态维护这个东西,每次跳nxt的时候用树状数组删除数. ...
- HTML <legend> 标签
转自:https://www.w3cschool.cn/htmltags/tag-legend.html <!DOCTYPE HTML> <html> <body> ...