Codeforces Round #305 (Div. 2).D
来源:互联网 发布:华三基于端口nat配置 编辑:程序博客网 时间:2024/05/15 23:52
547B.Mike and Feet
link:http://codeforces.com/contest/548/problem/D
维护一个单调递增的栈, 来记录每个数最大的范围是多少(这样的话要用到map来离散化,但是这样其实是没什么必要的,直接换成i大的范围最大的是多少,这样更快一点)
这代码写的比较挫, 还请见谅.
我其实是故意不写注释的…(逃
#include <cmath>#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#include <string>#include <map>#include <vector>#include <set>#include <queue>#include <stack>#include <iostream>#define LL long long#define pb push_back#define lb lower_bound#define eps 1e-8#define INF 0x3f3f3f3fusing namespace std;const int N = 200005;int a[N], n;map<int, int> mp;struct node{ int x; int l, r; node(){} node(int aa, int bb, int cc){x = aa; l = bb; r = cc;}}stk[N];int top = 0;void solve(){ for(int i=1; i<=n+1; i++){ if(top == 0) stk[top++] = (node){a[i], i, i}; else{ if(a[i] < stk[top-1].x){ int tl, tr = stk[top-1].r; while(a[i] < stk[top-1].x && top>0){ node t = stk[--top]; if(mp.find(t.x) == mp.end()) mp[t.x] = 0; mp[t.x] = max(mp[t.x], tr - t.l + 1); tl = t.l; } stk[top++] = (node){a[i], tl, i}; } else stk[top++] = (node){a[i], i, i}; } } map<int, int>::iterator it = mp.end(); it--; for(int i=1; i<=n; i++) { if(i>1) printf(" "); if(it->second >= i) printf("%d", it->first); else{ while(it->second < i && it != mp.begin()) it--; printf("%d", it->first); } }}void input(){ scanf("%d", &n); for(int i=1; i<=n; i++) scanf("%d", a+i); a[n+1] = 0; mp.clear(); solve();}int main(void){ #ifdef DK freopen("C:\\Users\\dell\\Desktop\\1.in","r",stdin); #endif // DK input(); return 0;}
0 0
- Codeforces Round #305 (Div.2) D
- Codeforces Round #305 (Div. 2) B D
- Codeforces Round #305 (Div. 2).D
- Codeforces Round #305 (Div. 2) D 栈
- Codeforces Round #305 (Div. 2)——D
- Codeforces Round #305 (Div. 2) 548D - Mike and Feet
- Codeforces Round #305 (Div. 2) D.Mike and Feet
- Codeforces Round #103 (Div. 2) D
- Codeforces Round #104 (Div. 2) D
- Codeforces Round #105 (Div. 2) D
- Codeforces Round #139 (Div. 2) D. Snake
- Codeforces Round #155 (Div. 2) D-rats
- Codeforces Round #159 (Div. 2) D sum
- Codeforces Round #184 (Div. 2) D、E
- Codeforces Round#186(Div 2) D
- codeforces Round # 187(Div.2) D
- Codeforces Round #191 (Div. 2) D
- Codeforces Round #194 (Div. 2) D. Chips
- python模拟登录URP教务系统评教
- ARP的解析过程
- Java 中的方法内部类
- Redis介绍
- JQuery上传插件Uploadify使用详解
- Codeforces Round #305 (Div. 2).D
- C++中的工厂模式(★好文章firecat推荐★)
- Binary Tree Level Order Traversal
- 在浏览器输入网址到网页打开数据经过的过程
- Keiluversion4开发51和ARM环境的配置
- OpenCV中GPU模块(CUDA)函数
- C++学习笔记之---输出一个数的八进制,十进制,十六进制
- 1019. General Palindromic Number (20):郁闷了,深呼吸,做道题···
- UIBezierPath 的使用介绍