zoukankan      html  css  js  c++  java
  • [Usaco2006 Nov]Bad Hair Day 乱发节

    Description
    农民John的某 N 头奶牛 (1 <= N <= 80,000) 正在过乱头发节!由于每头牛都意识到自己凌乱不堪的发型,FJ 希望统计出能够看到其他牛的头发的牛的数量。
    每一头牛 i有一个高度 h[i] (1 <= h[i] <= 1,000,000,000)而且面向同一方向排成一排。第i头牛可以看到第i+1,i+2头牛,只要他们的高度严格小于第i头牛,并且中间没有其他奶牛阻挡

    Input

    • Line 1: 牛的数量 N。

    • Lines 2..N+1: 第 i+1 是一个整数,表示第i头牛的高度。

    Output

    • Line 1: 一个整数表示c[1] 至 c[N]的和。

    Sample Input
    6
    10
    3
    7
    4
    12
    2

    输入解释:
    六头牛排成一排,高度依次是 10, 3, 7, 4, 12, 2。

    Sample Output
    5

    3+0+1+0+1=5


    跑一遍单调栈即可

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define inf 0x7f7f7f7f
    using namespace std;
    typedef long long ll;
    typedef unsigned int ui;
    typedef unsigned long long ull;
    inline int read(){
    	int x=0,f=1;char ch=getchar();
    	for (;ch<'0'||ch>'9';ch=getchar())	if (ch=='-')    f=-1;
    	for (;ch>='0'&&ch<='9';ch=getchar())	x=(x<<1)+(x<<3)+ch-'0';
    	return x*f;
    }
    inline void print(int x){
    	if (x>=10)     print(x/10);
    	putchar(x%10+'0');
    }
    const int N=8e5;
    int stack[N+10];
    int main(){
    	int n=read(),top=0;
    	ll ans=0;
    	for (int i=1;i<=n;i++){
    		int x=read();
    		while (top&&x>=stack[top])	top--;
    		ans+=top,stack[++top]=x;
    	}
    	printf("%lld
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    活动投票
    人品问题
    网站记录
    浅谈底层常数优化及编译器优化
    透过用户思维谈程序员的进阶之路
    我们为什么要学习?写给我的组员们
    原来你是这样的Websocket--抓包分析
    我看依赖注入
    使用反射+策略模式代替项目中大量的switch case判断
    JavaScript 词法作用域不完全指北
  • 原文地址:https://www.cnblogs.com/Wolfycz/p/8413601.html
Copyright © 2011-2022 走看看