zoukankan      html  css  js  c++  java
  • bzoj1628 [Usaco2007 Demo]City skyline(单调栈)

    Description

    Input

    第一行给出N,W
    第二行到第N+1行:每行给出二个整数x,y,输入的x严格递增,并且第一个x总是1

    Output

    输出一个整数,表示城市中最少包含的建筑物数量

    Sample Input

    10 26
    1 1
    2 2
    5 1
    6 3
    8 1
    11 0
    15 2
    17 3
    20 2
    22 1

    INPUT DETAILS:

    The case mentioned above

    Sample Output

    6
     


    题目的$w$没有意义
    我们发现高度$h$出现一次时,答案+1
    $h$在一个先增后降的序列中出现两次时,显然答案也只要+1
    那么我们可以设$ans=n$
    考虑维护一个单调递增栈,当某个数出现2次时,$ans-1$即可
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #define re register
     5 using namespace std;
     6 int n,q,h,w,st[50005],tp,ans;
     7 int main(){
     8     scanf("%d%d",&n,&w); ans=n;
     9     for(re int i=1;i<=n;++i){
    10         scanf("%d%d",&q,&h);
    11         while(tp&&st[tp]>h) --tp;
    12         if(st[tp]==h) --ans;
    13         else st[++tp]=h;        
    14     }printf("%d",ans);
    15     return 0;
    16 }
    View Code
     
  • 相关阅读:
    python 多线程测试
    python 多线程join()
    python 多线程 t.setDaemon(True):
    线程锁
    python 多线程
    模板渲染和参数传递.
    求两个数组的交集
    java数组并集/交集/差集(补集)
    java各种集合的线程安全
    页面跳转和重定向
  • 原文地址:https://www.cnblogs.com/kafuuchino/p/9863091.html
Copyright © 2011-2022 走看看