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
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
随机推荐
- css3某些特性
在下列情况下,建议使用opacity属性而不是rgba()函数 1.实现多种颜色(元素)的半透明效果.使用opacity属性,不仅背景颜色,就连文本颜色.边框颜色都会变透明. 2.在不知道颜色的情况下 ...
- fork函数的使用【学习笔记】
#include "apue.h" ; char buf[] = "a write to stdout\r\n"; int main(void) { int v ...
- 树状数组(二叉索引树 BIT Fenwick树) *【一维基础模板】(查询区间和+修改更新)
刘汝佳:<训练指南>Page(194) #include <stdio.h> #include <string.h> #include <stdlib.h&g ...
- POJ3680 Intervals —— 区间k覆盖问题(最小费用流)
题目链接:https://vjudge.net/problem/POJ-3680 Intervals Time Limit: 5000MS Memory Limit: 65536K Total S ...
- SQL Server2005+、MySQL、Oracle 数据库字典生成工具
之前找的数据库字典生成工具基本上都依赖于 Office Com 组件,在不安装 Office的情况下无法使用.怒,于是自己用C# 写了一个. 特征如下: 一.支持的数据库 MS ...
- linux防火墙过滤规则
一.linux防火墙基础 防火墙分为硬件防火墙和软件防火墙. 1.概述 linux 防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙. 包过滤机制:netfil ...
- WC2017游记
Day0 到杭州之后出了点锅换了辆车,等了好久才开= =到宿舍发现路由器就在房门口,稳啊,过了一会儿就连不上了= =而且只有门口那个连不上,可以连上楼下的= =之后干了啥也忘了…… Day1 上午直接 ...
- laravel的核心概念:服务提供者provider解析
我们知道laravel和核心就是一个IoC容器, 被称之为服务容器. 那么作为IoC容器, 就必须要有绑定对象生成器的工作. 在laravel中是服务提供者来项服务容器中绑定对象生成器的. 百牛信息 ...
- Table View Programming Guide for iOS---(六)---A Closer Look at Table View Cells
A Closer Look at Table View Cells A table view uses cell objects to draw its visible rows and then c ...
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 20. Model Binding
模型绑定 这是个最简单的绑定 先从表单找.再从路由的值上找,最后去QueryString上找 通过反射获取这个类型的属性进行填充.反射完有几个属性,就开始去找着几个属性并绑定值 复杂类型 最后又加了一 ...