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 ...
随机推荐
- The Class Loader Hierarchy--转载
Class loaders in the Application Server runtime follow a delegation hierarchy that is illustrated in ...
- PureMVC(JS版)源码解析(三):Observer类
上一篇博客中,我们讲到了Notification类(消息类),Notification(消息)是连接观察者(observer)和通知者(notifier)之间的桥梁.这一篇博客,主要是在代 ...
- 还原或删除sql server 2008数据库时,经常烩出现: “因为数据库正在使用,所以无法获得对数据库的独占访问权”,终解决方案
还原或删除sql server 2008数据库时,经常烩出现: “因为数据库正在使用,所以无法获得对数据库的独占访问权”,终解决方案如下 关键SQL语句: ALTER DATABASE [dateba ...
- (转)Java爬虫,信息抓取的实现
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23272657 今天公司有个需求,需要做一些指定网站查询后的数据的抓取,于是花了点 ...
- IIS7报错:如果要使用托管的处理程序,请安装 ASP.NET
转载至码农SeraphWU IIS7报错:如果要使用托管的处理程序,请安装 ASP.NET 进入CMD 输入如下命令即可 "%WINDIR%\Microsoft.NET\Framework\ ...
- ASP.NET程序如何更新发布
ASP.NET程序如何更新发布 一.首先右键项目,点击“发布” 然后,新建名称.类型选择文件,然后点击下一步: 点击发布即可! 二.
- SQL分页语句总结
今天对分页语句做一个简单的总结,他们大同小异的,只要理解其中一个其他的就很好理解了. 使用top选项 selecttop10*from Orders a where a.orderid notin(s ...
- js EasyUI前台 全选的实现
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWcAAAEQCAIAAADj/SKjAAAgAElEQVR4nO1dz48ry1W+/5N3swaFEP ...
- jQuery noConflict() 方法
如何在页面上同时使用 jQuery 和其他框架? jQuery 和其他 JavaScript 框架 正如您已经了解到的,jQuery 使用 $ 符号作为 jQuery 的简写. 如果其他 JavaSc ...
- [Introduction to programming in Java 笔记] 1.3.7 Converting to binary 十进制到二进制的转换
public class Binary { public static void main(String[] args) { // Print binary representation of N. ...