POJ 3250 Bad Hair Day(DP / 单调栈)
来源:互联网 发布:淘宝bin牙齿矫正器 编辑:程序博客网 时间:2024/06/03 13:55
Bad Hair Day
开个标记数组记录,记录右边第一个比它大的位置。
#include <stdio.h>#include <string.h>#define N 80001long long p[N],left[N],sum;int main(){ int n,i,j; scanf("%d",&n); for(i = 1; i <= n; i++) scanf("%lld",&p[i]); sum = 0; for(i = n; i >= 1; i--) { j = i+1; while(j <= n && p[j] < p[i]) { j = left[j]; } left[i] = j; sum += j-i-1; } printf("%lld\n",sum); return 0;}
单调栈:
给出这些牛的高度,要求每头牛可以看到的牛的数量的和。
把要求作一下转换,其实就是要求每头牛被看到的次数之和。这个可以使用单调栈来解决。
从左到右依次读取当前牛的高度,从栈顶开始把高度小于或等于当前牛的高度的那些元素删除,此时栈中剩下的元素的数量就是可以看见当前牛的其他牛的数量。把这个数量加在一起,就可以得到最后的答案了。
#include <iostream>#include <cstdio>using namespace std;const int N = 80005;int stack[N];int top, n;int main(){ int num; long long ans = 0; scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d", &num); while (top > 0 && stack[top - 1] <= num) --top; ans += top; stack[top++] = num; } printf("%lld\n", ans); return 0;}
0 0
- POJ 3250 Bad Hair Day(DP / 单调栈)
- poj 3250:Bad Hair Day---单调栈
- POJ 3250 Bad Hair Day(单调栈)
- POJ 3250 Bad Hair Day(单调栈)
- POJ 3250 Bad Hair Day 单调栈
- poj 3250 Bad Hair Day 单调栈
- [单调栈] poj 3250 Bad Hair Day
- POJ 3250 Bad Hair Day 【单调栈】
- poj 3250 Bad Hair Day 【单调栈】
- poj 3250 Bad Hair Day(单调栈)
- Poj 3250 Bad Hair Day 【单调栈】
- POJ 3250 - Bad hair day(单调栈)
- poj-3250 Bad Hair Day(单调栈)
- Bad Hair Day(POJ 3250) 单调栈
- poj 3250 Bad Hair Day单调栈
- Bad Hair Day -- 3250poj 单调栈
- POJ 3250 Bad Hair Day (单调栈)
- poj 3250 Bad Hair Day(单调栈)
- 求抛物线与直线形成的面积(数学)
- 字符串二维数组排序(知识点)
- Java_Script-XMLHttpRequest
- 因式分解(数学)(未完成 还需完善)
- Linux I2C设备读写应用程序
- POJ 3250 Bad Hair Day(DP / 单调栈)
- UVA 10453 Make Palindrome(DP)
- POJ 1019 Number Sequence(组合数学)
- POJ 1942 Paths on a Grid(组合数学)
- 数据结构之堆排序
- HDU 3123 GCC(同余模定理)
- UVA 10066 The Twin Towers (LCS)
- HDU 2546 饭卡(背包)
- FS210无线网卡驱动移植