链接

这题意甚是难懂。。当且峰值为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的更多相关文章

  1. UVALive 6531 Go up the ultras 单调栈+RMQ

    题目链接:点击打开链接 题意: 给定n座山 以下n个数字表示n座山的高度 若这座山u合法,则要满足: 1.若u的左边存在比u高的山,设v是u左边距离u近期的且严格比u高的山,在[v,u]之间至少有一座 ...

  2. The 2013 South America/Brazil Regional Contest 题解

    A: UVALive 6525 cid=61196#problem/A" style="color:blue; text-decoration:none">Atta ...

  3. 2008 SCI 影响因子(Impact Factor)

    2008 SCI 影响因子(Impact Factor) Excel download 期刊名缩写 影响因子 ISSN号 CA-CANCER J CLIN 74.575 0007-9235 NEW E ...

  4. Image Processing and Analysis_8_Edge Detection:Edge and line oriented contour detection State of the art ——2011

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

随机推荐

  1. WIFI的通信知识整理

    这两天在解决wifi芯片的一个底层问题,看了很多资料,下面做一个简要记录: 1.信号调制的基本原理 链接:http://wenku.baidu.com/link?url=3K6Z5fBIN20lPzB ...

  2. 迭代器模式(Iterator.hasNaxt())

    迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 迭代器模式属于行为型模式. ...

  3. 简单的JDBC编程步骤

    1.加载数据库驱动(com.mysql.jdbc.Driver) 2.创建并获取数据库链接(Connection) 3.创建jdbc statement对象(PreparedStatement) 4. ...

  4. 【Java】DateUtil(1)

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  5. windows下关闭指定端口服务,解决tomcat端口占用问题

    http://blog.aizhet.com/Server/640.html 在windows下做java EE的开发时:搭建 Eclipse+tomcat的java web开发环境:在应用之中经常遇 ...

  6. putty与emacs

    win环境下putty登录到linux并使用emacs时,需要折腾好配置才能正常工作.下面是折腾过程中碰到的问题与解决步骤: 1)要在putty控制台中启用鼠标,只需要在.emacs配置文件中启用xt ...

  7. BZOJ_1915_[Usaco2010 Open]奶牛的跳格子游戏_DP+单调队列

    BZOJ_1915_[Usaco2010 Open]奶牛的跳格子游戏_DP+单调队列 Description 奶牛们正在回味童年,玩一个类似跳格子的游戏,在这个游戏里,奶牛们在草地上画了一行N个格子, ...

  8. const 和指针

    c++用了那么久,觉得 const 和指针配合到一起的时候就会有点点分不出来. 如下: const Data* pData; Data const * pData Data * const pData ...

  9. Table View Programming Guide for iOS---(四)---Navigating a Data Hierarchy with Table Views

    Navigating a Data Hierarchy with Table Views 导航数据表视图层次 A common use of table views—and one to which ...

  10. this关键字在继承中的使用

    参考:http://blog.csdn.net/gxzzxj/article/details/51946144 下面是自己的代码: public class ChildA extends Father ...