zoukankan      html  css  js  c++  java
  • BZOJ 1113: [Poi2008]海报PLA

    1113: [Poi2008]海报PLA

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 1025  Solved: 679
    [Submit][Status][Discuss]

    Description

    N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们.

    Input

    第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽.其值在[1,1000000000]2 1/2 Postering

    Output

    最少数量的海报数.

    Sample Input

    5
    1 2
    1 3
    2 2
    2 5
    1 4

    Sample Output

    4

    HINT

     

    Source

     
    [Submit][Status][Discuss]

    分析

    单调栈

    代码

      1 /*<--- Opinion --->*/
      2 
      3    #define HEADER
      4    #define MYMATH
      5 // #define FILEIO
      6 // #define FSTREAM
      7 // #define FREOPEN
      8    #define FASTREAD
      9    #define SHORTNAME
     10 
     11 ///// HEADER FILE /////
     12 
     13 #ifdef HEADER
     14 
     15 #include <cmath>
     16 #include <string>
     17 #include <cstdio>
     18 #include <cstring>
     19 #include <cstdlib>
     20 #include <algorithm>
     21 
     22 #include <sstream>
     23 #include <fstream>
     24 #include <iostream>
     25 
     26 #include <set>
     27 #include <map>
     28 #include <list>
     29 #include <queue>
     30 #include <stack>
     31 #include <vector>
     32 #include <utility>
     33 #include <functional>
     34 
     35 #endif
     36 
     37 ///// SHORTNAME /////
     38 
     39 #ifdef SHORTNAME
     40 
     41 #define LL long long
     42 #define ll long long
     43 #define re register
     44 #define un unsigned
     45 #define rb re bool
     46 #define ri re int
     47 #define ui un int
     48 #define rl re LL
     49 #define ul un LL
     50 
     51 #define rep (x, y) for (ri i = x; i <= y; ++i)
     52 #define repi(x, y) for (ri i = x; i <= y; ++i)
     53 #define repj(x, y) for (ri j = x; j <= y; ++j)
     54 #define repk(x, y) for (ri k = x; k <= y; ++k)
     55 
     56 #define upto(x) for (ri i = 1; i <= x; ++i)
     57 #define dnto(x) for (ri i = x; i >= 1; --i)
     58 
     59 #define up(x) for (ri i = 1; i <= x; ++i)
     60 #define dn(x) for (ri i = x; i >= 1; --i)
     61 
     62 #define put(x)   printf("%lld ",  (LL)x)
     63 #define putln(x) printf("%lld
    ", (LL)x)
     64 
     65 #endif
     66 
     67 ///// FASTREAD /////
     68 
     69 #ifdef FASTREAD
     70 
     71 const int FR_lim = 10000000;
     72 
     73 char *FR_c;
     74 
     75 inline void fsetup(FILE *FR_file)
     76 {
     77     FR_c = new char[FR_lim];
     78     fread(FR_c, 1, FR_lim, FR_file);
     79 }
     80 
     81 template <class T>
     82 inline void fread(T &FR_num)
     83 {
     84     FR_num = 0; rb FR_neg = 0;
     85 
     86     while (*FR_c < '0')
     87         if (*FR_c++ == '-')
     88             FR_neg ^= true;
     89 
     90     while (*FR_c >= '0')
     91         FR_num = FR_num*10 + *FR_c++ - '0';
     92 
     93     if(FR_neg)FR_num = -FR_num;
     94 }
     95 
     96 #endif
     97 
     98 ///// FILE I/O /////
     99 
    100 #ifdef FILEIO
    101 
    102 FILE *FIN = fopen("input.txt", "r");
    103 FILE *FOUT = fopen("output.txt", "w");
    104 
    105 #ifndef FSTREAM
    106 
    107 #define fin FIN
    108 #define fout FOUT
    109 
    110 #endif
    111 
    112 #endif
    113 
    114 ///// FSTREAM /////
    115 
    116 #ifdef FSTREAM
    117 
    118 std::ifstream fin("input.txt");
    119 std::ofstream fout("output.txt");
    120 
    121 #endif
    122 
    123 ///// MYMATH /////
    124 
    125 #ifdef MYMATH
    126 
    127 #define min(a, b) (a < b ? a : b)
    128 #define max(a, b) (a > b ? a : b)
    129 
    130 #define Min(a, b) a = min(a, b)
    131 #define Max(a, b) a = max(a, b)
    132 
    133 #define abs(x) (x < 0 ? -x : x)
    134 
    135 #define sqr(x) ((x)*(x))
    136 
    137 #endif
    138 
    139 ///// _MAIN_ /////
    140 
    141 void _main_(void);
    142 
    143 signed main(void)
    144 {
    145 
    146 #ifdef FREOPEN
    147     freopen("input.txt", "r", stdin);
    148     freopen("output.txt", "w", stdout);
    149 #endif
    150 
    151     _main_();
    152 
    153 #ifdef FILEIO
    154     fclose(FIN);
    155     fclose(FOUT);
    156 #endif
    157 
    158 #ifdef FREOPEN
    159     fclose(stdin);
    160     fclose(stdout);
    161 #endif
    162 
    163 #ifdef FSTREAM
    164     fin.close();
    165     fout.close();
    166 #endif
    167 
    168     return 0;
    169 }
    170 
    171 /*<--- Main --->*/
    172 
    173 #define N 250005
    174 
    175 int n;
    176 int ans;
    177 int h[N];
    178 int stk[N];
    179 int tot = 0;
    180 
    181 void _main_(void)
    182 {
    183     fsetup(stdin);
    184     
    185     fread(n);
    186     
    187     ri x;
    188     
    189     up(n)
    190     {
    191         fread(x); fread(x);
    192         while (tot && stk[tot] > x)--tot;
    193         if (tot && stk[tot] == x)++ans;
    194         stk[++tot] = x;
    195     }
    196     
    197     putln(n - ans);
    198 }
    BZOJ_1113.cpp

    好像那天特别高兴的样子,不知不觉就敲了个不明所以的模板, 补一份正常的代码。

     1 #include <bits/stdc++.h>
     2 signed main(void) {
     3     int n, tot = 0;
     4     scanf("%d", &n);
     5     std::stack<int> stk;
     6     for (int i = 1; i <= n; ++i) {
     7         int h; scanf("%*d%d", &h);
     8         while (!stk.empty() && h < stk.top())
     9             stk.pop();
    10         if (!stk.empty() && h == stk.top())
    11             ++tot;
    12         stk.push(h);
    13     }
    14     printf("%d
    ", n - tot);
    15 }
    BZOJ_1113.cpp

    @Author: YouSiki

  • 相关阅读:
    Java并发编程原理与实战二十九:Exchanger
    Java并发编程原理与实战二十八:信号量Semaphore
    Java并发编程原理与实战二十七:循环栅栏:CyclicBarrier
    Java并发编程原理与实战二十六:闭锁 CountDownLatch
    Java并发编程原理与实战二十五:ThreadLocal线程局部变量的使用和原理
    Java并发编程原理与实战二十四:简易数据库连接池
    Java并发编程原理与实战二十三:Condition原理分析
    Java并发编程原理与实战二十二:Condition的使用
    Java并发编程原理与实战二十一:线程通信wait&notify&join
    Java并发编程原理与实战二十:线程安全性问题简单总结
  • 原文地址:https://www.cnblogs.com/yousiki/p/6091683.html
Copyright © 2011-2022 走看看