Psychos in a Line
Codeforces Round #189 (Div. 1) B:http://codeforces.com/problemset/problem/319/B
题意:每一ROUND如果某个人的数字大于他右边的人,他就会干掉右边的人,一个人可以同时干掉别人和被干掉,问要多少ROUND结束后才不会死人。
题解:第一次接触传说中的单调队列,自己觉得这一题还是dp占主要部分。还是那就话,dp就是一种艺术。f[i]表示的是被第几次杀死,f[i]=f[j]+1;(j表示i左边的比i小的数),不过这里处理dp,还要维护一下单调队列,对于i后面的元素k来说,k被杀死的时候,一定与i前面的比i小的元素没有关系,因为i被他们大,如果前面比i小的数都能杀死k,那么i肯定能杀死k,所以i前比i小的元素,在后面的遍历中用不上。所以直接删除,减少不必要的运算和判断。
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
#define N 100005
vector<int> v;
int f[N], n, t, cnt;
int main() {
scanf("%d", &n);
memset(f, , sizeof(f));
for (int i=; i<n; i++) {
scanf("%d", &t);
cnt = ;
if (v.size() == ) { v.push_back(t); continue; }
while (v.back() < t) {
cnt = max(cnt, f[v.back()]);
v.pop_back();
if (v.size() == ) break;
}
if (v.size() == ) { v.push_back(t); continue; }
f[t] = cnt + ;
v.push_back(t);
}
int ans = ;
for (int i=; i<n; i++) ans = max(ans, f[i]);
printf("%d\n", ans);
return ;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int n,ans,flag;
int a[],b[],xb[]; // a[]-存输入的数据
// b[]-存需要几次操作将他杀掉 xb[]-存杀掉第i个人的人的下标
void solve(){
int i,j,ma;
ans=-;
b[]=xb[]=; // 默认b[1]杀不掉
for(i=; i<=n; i++){ //从第二个开始判断
ma=;
flag=; // 存a[i]是否能被杀掉
j=i-;
while(a[j]<a[i]&&j){
if(!b[j]){ // 如果a[j]不能被前面人杀掉 则a[i]也不能
flag=;
break;
}
if(b[j]>ma) ma=b[j];
j=xb[j]; // 跳转到杀死a[j]的人
}
if(!flag) b[i]=ma+; //如果被杀死 则需ma+1步
else b[i]=; // 没被杀死则需要0步
xb[i]=j; // 记录是谁杀死他的
}
for(i=; i<=n; i++){
if(ans<b[i]) ans=b[i];
}
}
int main(){
int i,j;
while(~scanf("%d",&n)){
for(i=; i<=n; i++){
scanf("%d",&a[i]);
}
solve();
printf("%d\n",ans);
}
return ;
}
Psychos in a Line的更多相关文章
- Codeforces Round #189 (Div. 1) B. Psychos in a Line 单调队列
B. Psychos in a Line Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/p ...
- Codeforces Round #189 (Div. 2) D. Psychos in a Line 单调队列dp
D. Psychos in a Line time limit per test 1 second memory limit per test 256 megabytes input standard ...
- codeforces 319B Psychos in a Line(模拟)
There are n psychos standing in a line. Each psycho is assigned a unique integer from 1 to n. At eac ...
- Psychos in a Line CodeForces - 319B (单调栈的应用)
Psychos in a Line CodeForces - 319B There are n psychos standing in a line. Each psycho is assigned ...
- B. Psychos in a Line 解析(思維、單調棧)
Codeforce 319 B. Psychos in a Line 解析(思維.單調棧) 今天我們來看看CF319B 題目連結 題目 給一個數列,如果相鄰兩數,左邊大於右邊,那麼就可以殺死右邊的數字 ...
- CF 319B Psychos in a Line 【单调队列】
维护一个单调下降的队列. 对于每一个人,只需要找到在他前面且离他最近的可以杀掉他的人即可. #include <cstdio> #include <vector> #inclu ...
- Codeforces Round #189 (Div. 1 + Div. 2)
A. Magic Numbers 不能出现连续的3个4,以及1.4以外的数字. B. Ping-Pong (Easy Version) 暴力. C. Malek Dance Club 考虑\(x\)二 ...
- ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id
出现场景:当点击"分类"再返回"首页"时,发生error退出 BUG描述:Caused by: java.lang.IllegalArgumentExcep ...
- Error on line -1 of document : Premature end of file. Nested exception: Premature end of file.
启动tomcat, 出现, ( 之前都是好好的... ) [lk ] ERROR [08-12 15:10:02] [main] org.springframework.web.context.Con ...
随机推荐
- OpenJDK和Sun/OracleJDK 区别 与联系
首先要先明确之间,以及OpenJDK 6.OpenJDK 7.OpenJDK 7u和OpenJDK 8等项目之间是什么关系,这有助于确定接下来编译要使用的JDK版本和源码分支.从前面介绍的Java发展 ...
- N!末尾有多少个零
题目一:210!最后结果有几个零. 请自己思索10分钟以上再看解释 凡是这种题目必有规律可言, 关键是你找到这个规律的恒心.可采用笨拙的方法思考. 1! = 1 ...
- SVN/GIT源代码泄露
造成SVN源代码漏洞的主要原因是管理员操作不规范.在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息.但一些网站管理员在发布代码时,不愿意使用‘导出’功能 ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(二)
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- less编码规范
Less 编码规范 简介 因为自己最近写css用的比较多还是less,整理了一份less规范, 代码组织 代码按如下形式按顺序组织: @import 变量声明 样式声明 // ✓ @import &q ...
- 最新的 iOS 申请证书与发布流程(2016.12)
今天刚好客户定制的APP需要上架,也提供了新的开发者账号,所以就顺带把申请证书与发布流程写一遍. 证书是什么? 上面这个就是我们申请好证书后,下载到本地的.cer文件,也就是常说的开发证书与发布证书的 ...
- 三种C#.net生成静态页面的方法
ASP.NET生成静态页面方法主要有三种 第一种方法:向服务器的动态页面发送请求,获取页面的html代码.这种方法缺点显而易见:速度慢.另外如果请求的动态页面有验证控件的话,返回的html页面却无 ...
- HDU 3006 The Number of set(位运算 状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3006 题目大意:给定n个集合,每个集合都是由大于等于1小于等于m的数字组成,m最大为14.由给出的集合 ...
- Linux的more、less
2.more 文件内容或输出查看工具: more 是我们最常用的工具之一,最常用的就是显示输出的内容,然后根据窗口的大小进行分页显示,然后还能提示文件的百分比: de>[root@localho ...
- 关于Zen Coding:css,html缩写
zen coding 是一个俄罗斯人写的编辑器(支持大部分现下流行的编辑器)插件,其安装也是非常简单,只要安装插件,然后在项目中拷贝js文件就可以.像Webstorm6.0.2中已经包含这样的插件.什 ...