51nod 1562 玻璃切割 (set)
Posted jaydenouyang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1562 玻璃切割 (set)相关的知识,希望对你有一定的参考价值。
1 #include<stdio.h> 2 #include<iostream> 3 #include<set> 4 using namespace std; 5 typedef long long LL; 6 7 const int maxn = 200010; 8 LL ans[maxn]; 9 int x[maxn]; 10 char c[maxn]; 11 set<int> row,col; 12 set<int>:: iterator it; 13 14 int main() 15 { 16 int w, h, n, maxr, maxc; 17 while(~scanf("%d%d%d", &w, &h, &n)) 18 { 19 maxr = maxc = 0; 20 row.clear();col.clear(); 21 row.insert(0);row.insert(h); 22 col.insert(0);col.insert(w); 23 for(int i =0 ;i < n;i++){ 24 scanf("%*c%c%d", &c[i], &x[i]); 25 if(c[i] == ‘H‘) row.insert(x[i]); 26 else col.insert(x[i]); 27 } 28 int l, r; 29 for(it = row.begin();it != row.end();){ 30 l = *it; 31 it++; 32 r = *it; 33 maxr = max(maxr, r-l); 34 } 35 for(it = col.begin();it != col.end();){ 36 l = *it; 37 it++; 38 r = *it; 39 maxc = max(maxc, r-l); 40 } 41 for(int i = n-1;i >= 0;i--){ 42 ans[i] = 1LL*maxr*maxc; 43 if(c[i] == ‘H‘){ 44 it = row.lower_bound(x[i]); 45 it--; 46 l = *it; 47 it++;it++; 48 r = *it; 49 maxr = max(maxr, r-l); 50 row.erase(x[i]); 51 } 52 else{ 53 it = col.lower_bound(x[i]); 54 it--; 55 l = *it; 56 it++;it++; 57 r = *it; 58 maxc = max(maxc, r-l); 59 col.erase(x[i]); 60 } 61 } 62 for(int i = 0;i < n;i++) 63 printf("%lld ", ans[i]); 64 } 65 return 0; 66 }
以上是关于51nod 1562 玻璃切割 (set)的主要内容,如果未能解决你的问题,请参考以下文章