码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces 527C:STL set

时间:2016-01-17 20:05:04      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

x和y各用一个set保存切割点

L[k] H[k]记录长度为k的线段有几个

每添加一个切点,更新L[] H[],然后找到各找到最大值,相乘就是答案

关键是学学set的使用

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include"cstdio"
#include"queue"
#include"cmath"
#include"stack"
#include"iostream"
#include"algorithm"
#include"cstring"
#include"queue"
#include"map"
#include"set"
#include"vector"
#define ll long long
#define mems(a,b) memset(a,b,sizeof(a))
#define ls pos<<1
#define rs pos<<1|1

using namespace std;
const int MAXN = 200500;
const int MAXE = 200500;
const int INF = 0x3f3f3f3f;

set<int> h,v;
int L[MAXN],H[MAXN];

int main(){
    int x,y,n,ch=0,cv=0;
    scanf("%d%d%d",&y,&x,&n);
    mems(L,0);
    mems(H,0);
    h.insert(0);v.insert(0);
    h.insert(x);v.insert(y);
    int mxx=x,mxy=y;
    L[x]=H[y]=1;
    for(int i=0;i<n;i++){
        char arr[5];
        int t;
        set<int>::iterator l,r,mid;
        scanf("%s %d",arr,&t);
        if(arr[0]==H){
            h.insert(t);
            l=r=mid=h.find(t);
            l--;r++;
            L[*r-*l]--;
            L[*r-*mid]++;
            L[*mid-*l]++;
            if(!L[mxx]) while(!L[mxx]) mxx--;
        }
        else{
            v.insert(t);
            l=r=mid=v.find(t);
            l--;r++;
            H[*r-*l]--;
            H[*r-*mid]++;
            H[*mid-*l]++;
            if(!H[mxy]) while(!H[mxy]) mxy--;
        }
        //cout<<mxx<<‘\t‘<<mxy<<endl;
        printf("%I64d\n",(ll)mxx*mxy);
    }
    return 0;
}

 

codeforces 527C:STL set

标签:

原文地址:http://www.cnblogs.com/luxiaoming/p/5137624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!