题目连接:http://oj.haihongblog.com/problem.php?id=1003

线段树维护区间最小值,并且求解下标

#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std; const int maxn=+ ;
const int INF=0x7FFFFFFF;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int N,K,zzt;
vector<int> ans; int MIN[maxn<<]; void PushUP(int rt)
{
MIN[rt]=min(MIN[rt<<],MIN[rt<<|]);
} void Build(int l,int r,int rt)
{
if(l==r)
{
scanf("%d",&MIN[rt]);
return;
}
int m=(l+r)>>;
Build(lson);
Build(rson);
PushUP(rt);
} void Update(int p,int add,int l,int r,int rt)
{
if(l==r)
{
MIN[rt]=add;
return;
}
int m=(l+r)>>;
if(p<=m)
Update(p,add,lson);
else
Update(p,add,rson);
PushUP(rt);
} int Query(int L,int R,int l,int r,int rt)
{
if(L<=l&&R>=r) return MIN[rt];
int m=(l+r)>>;
int ret=INF;
if(L<=m) ret=min(ret,Query(L,R,lson));
if(R>m) ret=min(ret,Query(L,R,rson));
return ret;
} void Find(int L,int R,int l,int r,int rt)
{ if(L<=l&&R>=r)
{
int lx=l,rx=r,node=rt;
while()
{
int mx=(lx+rx)/;
if(lx==rx) {zzt=lx;break;}
if(K>=MIN[*node])
{
node=*node;
rx=mx;
continue;
} if(K>=MIN[*node+])
{
node=*node+;
lx=mx+;
continue;
}
}
return;
} int m=(l+r)>>;
if(K>=MIN[rt<<]&&L<=m) Find(L,R,lson);
if(zzt!=-) return;
if(K>=MIN[rt<<|]&&R>m) Find(L,R,rson);
if(zzt!=-) return;
} int main()
{
// freopen("F:\\test (1).in","r",stdin);
// freopen("F:\\out.txt","w",stdout); while(~scanf("%d%d",&N,&K)){
Build(,N,); bool fail=;
int pos=;
ans.clear(); for(int i=;i<=N;i++)
{
int P=Query(pos,N,,N,);
if(K>=P) //后面一段存在可以吃的点
{
zzt=-; //找到第一个大于等于K的位置 zzt
Find(pos,N,,N,);
ans.push_back(zzt);
pos=zzt;
//该位置的值更新为INF
Update(zzt,INF,,N,);
K++;
}
else //后面一段不存在可以吃的点,从头开始找
{
P=Query(,N,,N,);
if(K>=P)
{
zzt=-; //找到第一个大于等于K的位置 zzt
Find(,N,,N,);
ans.push_back(zzt);
pos=zzt;
//该位置的值更新为INF
Update(zzt,INF,,N,);
K++;
} else //找不到了,失败
{
fail=;
break;
}
}
} if(fail) printf("-1\n");
else
{
for(int i=;i<ans.size();i++)
{
printf("%d",ans[i]);
if(i<ans.size()-) printf(" ");
else printf("\n");
}
}
}
return ;
}

HaiHongOJ 1003 God Wang的更多相关文章

  1. Bestcoder#5 1003

    Bestcoder#5 1003 Poor RukawTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  2. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  3. dp 动态规划 hdu 1003 1087

    动态规划就是寻找最优解的过程 最重要的是找到关系式 hdu 1003 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目大意:求最大字序列和, ...

  4. PKU 1003解题

    首先庆祝一下,今天连A了3题.感觉后面这题太简单了.. 由于英文不好 ,找了个翻译: 若将一叠卡片放在一张桌子的边缘,你能放多远?如果你有一张卡片,你最远能达到卡片长度的一半.(我们假定卡片都正放在桌 ...

  5. POJ做题笔记:1000,1004,1003

    1000 A+B Problem 题目大意:输入两个数a和b,输出他们的和. 代码: #include <stdio.h> int main() { int a, b; while (sc ...

  6. 未注册wang域名批量查询工具

    一.支持规则查询 可自定义生成域名进行查询,可生成任意位数的字母数字域名,根据[声母].[韵母]生成单拼,双拼,三拼等域名,还可根据字典生成,支持全拼.首拼识别,全国城市区号.城市全拼.城市首拼.热门 ...

  7. 迪杰斯特拉算法——PAT 1003

    本文主要是将我对于我对于迪杰斯特拉算法的理解写出来,同时通过例题来希望能够加深对于算法的理解,其中有错误的地方希望大家指正. 迪杰斯特拉算法 我将这个算法理解成一个局部到整体的算法,这个方法确实越研究 ...

  8. hdu5024 Wang Xifeng's Little Plot (水

    http://acm.hdu.edu.cn/showproblem.php?pid=5024 网络赛 Wang Xifeng's Little Plot Time Limit: 2000/1000 M ...

  9. Codeforces Round #270 1003

    Codeforces Round #270 1003 C. Design Tutorial: Make It Nondeterministic time limit per test 2 second ...

随机推荐

  1. Spring Bean 生命周期

    转自:也谈Spring Bean的生命周期 开篇先用一张老图描述下Spring中Bean容器的生命周期. 插叙一下,记得某个博文中提到:“Spring的Bean容器只管理非单例Bean的生命周期,单例 ...

  2. <context:annotation-config> 和 <context:component-scan>的区别

    转自:GOOD spring <context:annotation-config> 跟 <context:component-scan>诠释及区别 <context:a ...

  3. 推翻自己和过往,重学自定义View

    http://blog.csdn.net/lfdfhl/article/details/51671038 深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 A ...

  4. adb 卸载android系统程序

    下面是通过 pm list packages -f 列出手机中的软件,然后跟模拟器中的软件进行对比后得出的可以安全卸载的列表.   注意:卸载之后就没有Google Market了,还想用google ...

  5. perl脚本之目录

    来源: http://www.cnblogs.com/itech/archive/2013/02/20/2919204.html http://stackoverflow.com/questions/ ...

  6. 【C#】HTTP请求GET,POST(远程证书失效)

    HTTP定义了与服务器交互的不同方法,基本方法有GET,POST,PUT,DELETE,分别对于查,该,增,删.一般情况下我们只用到GET和POST,其他两种都也可以用GET和POST来实现,很多浏览 ...

  7. document.body与document.documentElement

    document.body 获取的是body,document.documentElement获取的是html,在任何浏览器上都是如此 相关问题: 1.获取页面滚动条滚动距离 chrome,safar ...

  8. cocos2d-x中使用tinyxml遇到的问题及解决

    1.问题: cocos2d-x集成tinyxml后在vs下运行正常,但是在Android下在读取xml文件时发生异常,读取时使用的是LoadFile函数 2. 解决方案: 先把xml文件内容读取到内存 ...

  9. GCD应用场景

    1.计算文件大小放在子线程中中计算,计算完了,回到主线程更新UI

  10. mysql中exists的用法介绍

    SELECT c.CustomerId, CompanyName   2 FROM Customers c   3 WHERE EXISTS(   4     SELECT OrderID FROM  ...