메뉴 건너뛰기

Programing

BAEKJOON

10534

관리자 2020.04.11 09:28 조회 수 : 44

C++

#include <cstdio>

#include <algorithm>

#include <vector>

using namespace std;

struct Line{

    int p, s, e, id;

 

};

Line line[2][100010];

int N, i_2;

long long parent[50010],rank_[50010],size_[500010],result=-1;

int find_(int a){

    if(a==parent[a])

        return a;

    return parent[a]=find_(parent[a]);

}

int comp(Line c,Line d){

    if(c.p==d.p){

        if(c.s==d.s){

            return c.e<d.e;

        }

        return c.s<d.s;

    }

    return c.p<d.p;

}

//comp-line connect-sort

void union_(int a,int b){

    a=find_(a);

    b=find_(b);

    if(a==b)

        return;

    if(rank_[a]<rank_[b]){

        parent[a]=b;

        size_[b]+=size_[a];

        size_[a]=0;

        result=max(result, size_[b]);

    }else{

        parent[b]=a;

        size_[a]+=size_[b];

        size_[b]=0;

        result=max(result, size_[a]);

        if(rank_[a]==rank_[b]){

            rank_[a]++;

        }

    }

}

int main()

{

    for(int i=0;i<=50005;i++){

        parent[i]=i;

    }

    scanf("%d",&N);

    for(int i=0;i<N;i++){

        int x,y,w,h;

        scanf("%d %d %d %d",&x,&y,&w,&h);

        line[0][i]={x,y,y+h,i};

        line[1][i]={y,x,x+w,i};

        line[0][i+N]={x+w,y,y+h,i};

        line[1][i+N]={y+h,x,x+w,i};

        size_[i]=h*w;

        result=max(result,(long long)h*w);

    }

    sort(line[0],line[0]+N+N,comp);

    sort(line[1],line[1]+N+N,comp);

    for(int j=0;j<=1;j++){

        for(int i=1;i<N+N;i++){

            int k,u=line[j][i-1].e;

            for(k=i;line[j][k-1].p==line[j][k].p;k++){

                if(u>=line[j][k].s){

                    u=max(u,line[j][k].e);

                    union_(line[j][k-1].id,line[j][k].id);

                }else{

                    break;

                }

            }

            i=k;

        }

    }

    printf("%d",result);

    return 0;

}

 
번호 제목 글쓴이 날짜 조회 수
공지 안내사항 관리자 2019.12.21 164
15 14430 관리자 2019.12.21 6
14 1182 관리자 2019.12.21 8
13 11660 관리자 2020.04.11 46
12 1149 관리자 2019.12.21 8
11 10999 관리자 2020.04.11 47
10 10937 관리자 2020.04.11 41
9 10919 관리자 2020.04.11 42
8 10800 관리자 2019.12.21 8
7 10799 관리자 2019.12.21 9
» 10534 관리자 2020.04.11 44
5 10164 관리자 2019.12.21 6
4 10159 관리자 2019.12.21 6
3 10157 관리자 2019.12.21 8
2 10070 관리자 2020.04.11 44
1 1005 관리자 2019.12.21 8
위로