CF 189 div2 D
来源:互联网 发布:linux c 调用so动态库 编辑:程序博客网 时间:2024/05/01 18:11
There are n psychos standing in a line. Each psycho is assigned a unique integer from1 to n. At each step every psycho who has an id greater than the psycho to his right (if exists) kills his right neighbor in the line. Note that a psycho might kill and get killed at the same step.
You're given the initial arrangement of the psychos in the line. Calculate how many steps are needed to the moment of time such, that nobody kills his neighbor after that moment. Look notes to understand the statement more precise.
The first line of input contains integer n denoting the number of psychos,(1 ≤ n ≤ 105). In the second line there will be a list ofn space separated distinct integers each in range1 to n, inclusive — ids of the psychos in the line from left to right.
Print the number of steps, so that the line remains the same afterward.
1010 9 7 8 6 5 3 4 2 1
2
61 2 3 4 5 6
0
In the first sample line of the psychos transforms as follows: [10 9 7 8 6 5 3 4 2 1] → [10 8 4] → [10]. So, there are two steps.
#include <iostream>#include <cstdio>#include <cstring>#include <cstdio>#include <cstdlib>#include <map>#include <set>#include <vector>#include <queue>#include <stack>#include <algorithm>#include <list>using namespace std;typedef long long LL;typedef pair<int,int> P;const int maxn = 100000 + 5;const int INF = 1000000000;queue<P> Q;int next[maxn];int num[maxn];int main(){ int n; while(cin >> n){ while(!Q.empty()) Q.pop(); for(int i = 0;i < n;i++){ cin >> num[i]; next[i] = i+1; } for(int i = n-2;i >= 0;i--){ if(num[i] > num[i+1]) Q.push(P(i,0)); } int ans = 0; while(!Q.empty()){ int pos = Q.front().first; int round = Q.front().second; ans = max(ans,round); Q.pop(); if(next[pos] != n && num[pos] > num[next[pos]]){ next[pos] = next[next[pos]]; Q.push(P(pos,round+1)); } } cout << ans << endl; } return 0;}
- CF 189 div2 D
- CF 174(div2) D
- CF 161 div2 D
- CF 159 div2 d
- cf.256.div2.D
- cf R327 div2 D
- CF 190div2 D(贪心)
- CF 345 div2 D题
- cf div2 #453 ABC(D)
- CF round #79 div2 D bues
- CF #109 div2 D题 Colliders
- cf 153.div2 D. Playing with Permutations
- CF 162-div2 D 数学+dp
- CF 179(div2)D(floyed)
- CF 172(div2) D(单调队列)
- CF 141 div2 D(2-SAT)
- CF 103div2 D(dijkstra)
- CF #261 DIV2 A,B,C,D
- 基于Andoird 4.2.2的Account Manager源代码分析学习:AccountManager的初始化
- CCNode
- 找出删除两个文件相同部分Linux_grep,comm,awk
- GNUPLOT使用技巧
- 6410 otg 主控制器驱动移植
- CF 189 div2 D
- [队] 链式
- shellscript终止进程
- 正则表达式详解
- 图片高质量等比压缩java代码
- Java Web Start
- 多次连接相同表
- Robotium测试---正确地为安装包重新签名
- OpenRisc-32-ORPSoC烧写外部spi flash