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\n", (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", n - tot);
15 }
BZOJ_1113.cpp

 

 

@Author: YouSiki

posted @ 2016-11-22 23:33  YouSiki  阅读(293)  评论(0编辑  收藏  举报