디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[일반] 백준 반평면 땅따먹기2 맞왜틀 제발 살려다오 7시간째 이유를 못 찾는중

ㅇㅇ(121.55) 2024.04.27 09:06:03
조회 347 추천 0 댓글 10
														

https://www.acmicpc.net/problem/12876

 



리차오 트리 + 오프라인 동적 연결성으로 풀려는데


왜 틀렸는지 도저히 못 찾겠다

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf = 2e18;

struct Line {
    ll a,b;
    ll get(ll x) {
        return a*x+b;
    }
};

struct Life {
    Line line;
    ll s,e;
};

struct Node {
    ll l,r;
    ll s,e;
    Line line;    
};

struct Li_Chao {
    vector<Node> tree;
    stack<pair<Node,pair<ll,ll>>> s;
    ll cnt;
    void init(ll s,ll e) {
        tree.push_back({-1,-1,s,e,{0,-inf}});
    }
    
    void update(ll node,Line v) {
        s.push({tree[node],{node,cnt}});
        ll s=tree[node].s,e=tree[node].e;
        ll m=s+e>>1;
        Line low=tree[node].line, high=v;
        if(low.get(s)>high.get(s)) swap(low,high);
        if(low.get(e)<=high.get(e)) {
            tree[node].line=high;
            return;
        }
        if(low.get(m)<high.get(m)) {
            tree[node].line=high;
            if(tree[node].r==-1) {
                tree[node].r=tree.size();
                tree.push_back({-1,-1,m+1,e,{0,-inf}});
            }
            update(tree[node].r,low);
        } else {
            tree[node].line=low;
            if(tree[node].l==-1) {
                tree[node].l=tree.size();
                tree.push_back({-1,-1,s,m,{0,-inf}});
            }
            update(tree[node].l,high);
        }
    }
    
    ll query(ll node,ll x) {
        if(node==-1) return -inf;
        ll s=tree[node].s,e=tree[node].e;
        ll m=s+e>>1;
        if(x<=m) return max(tree[node].line.get(x),query(tree[node].l,x));
        else return max(tree[node].line.get(x),query(tree[node].r,x));
    }
    
    void undo() {
        cnt--;
        while(!s.empty()&&s.top().second.second>cnt) {
            tree[s.top().second.first]=s.top().first;
            s.pop();
        }
    }
    
} seg;

vector<vector<Life>> tree(1200001);
vector<vector<ll>> que(1);

void update(ll node,ll start,ll end,Life life) {
    ll s=life.s,e=life.e;
    if(start>=s&&end<=e) {
        tree[node].push_back(life);
        return;
    }
    if(end<s||start>e) return;
    ll mid=start+end>>1;
    update(node*2,start,mid,life);
    update(node*2+1,mid+1,end,life);
}

void divide(ll node,ll start,ll end) {
    seg.cnt++;
    for(auto i:tree[node]) seg.update(0,i.line);
    if(start!=end) {
        ll mid=start+end>>1;
        divide(node*2,start,mid);
        divide(node*2+1,mid+1,end);
    } else if(que[start][0]==3) {
        ll sol=seg.query(0,que[start][1]);
        if(sol<=-2e18) cout<<"EMPTY\n";
        else cout<<sol<<"\n";
    }
    seg.undo();
}

int main() {
    ll Q,t1,t2,t3=0;
    seg.init(-2e12,2e12);
    cin>>Q;
    for(ll i=1;i<=Q;i++) {
        cin>>t1>>t2;
        if(t1==1) {
            cin>>t3;
            que.push_back({t1,t2,t3});
        } else que.push_back({t1,t2});
        if(t1==2) que[t2].push_back(i);
    }
    for(ll i=1;i<=Q;i++) if(que[i][0]==1) {
        if(que[i].size()==3) update(1,1,Q,{{que[i][1],que[i][2]},i,Q});
        else update(1,1,Q,{{que[i][1],que[i][2]},i,que[i][3]-1});
    }
    divide(1,1,Q);
}

반평면 땅따먹기1은 맞은 거 보면 리차오 트리 기본 구현 자체는 틑린게 없는 거 같고 롤백하는 함수랑 오프라인 동적 연결성 용도로 만든 세그먼트 트리만 추가됨

메인 함수는 쿼리를 배열에 저장한 뒤 한 바퀴 순회하면서 삭제되는 정수쌍들은 수명이 언제인지 추가로 표시하게 구현함

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2858 설문 SNS로 싸우면 절대 안 질 것 같은 고집 있는 스타는? 운영자 24/05/06 - -
44466 공지 [ps 정보글 모음집] [2] 나는최고갤로그로 이동합니다. 24.05.07 332 11
44058 공지 알고리즘 대회 공부 과정 [21] 나는최고갤로그로 이동합니다. 24.04.20 1783 31
19170 공지 규칙 v2022.02.16 [8] 0xrgb갤로그로 이동합니다. 22.02.06 6388 36
1 공지 와 PS! [24] 0xrgb갤로그로 이동합니다. 18.05.28 21607 30
44488 일반 Ps하는 존잘 씹인싸 알파가 있을까 [3] ㅇㅇ(223.39) 13:44 101 0
44487 일반 고수님들 실버문제 반례점 ㅠㅠ [7] ㅇㅇ(119.195) 11:58 154 0
44486 일반 난 피린이가 맞는거 같다. laniakea갤로그로 이동합니다. 11:03 98 3
44485 일반 디지 대회 다 밀었다 [4] ㅇㅇ(14.35) 08:20 251 11
44484 일반 이 문제 출처가 왜 대회임? [1] ㅇㅇ(211.185) 01:27 280 0
44483 일반 검수가 생각보다 엄청 빡센듯 포로(119.202) 01:13 229 5
44482 일반 여기서 KMP랑 맞짱 까서 이길 사람 없음 [7] ㅇㅇ(210.0) 00:27 363 6
44481 일반 제목이 낭만뽕차는 백준문제 [25] ㅇㅇ(106.101) 00:09 497 4
44480 일반 2019년 초등학생 학살사건 [5] ㅇㅇ(175.196) 05.07 342 5
44479 일반 백준 골드까지 얼마나 걸릴까요? [11] ㅇㅇ(175.215) 05.07 309 3
44478 일반 클래스 점수 다 받으려면 모든 문제 다 풀어야하는 건가요? [3] ㅇㅇ(180.134) 05.07 191 0
44477 일반 투어리스트 사칭한 놈은 뭐냐 [4] ㅇㅇ(211.234) 05.07 291 0
44476 일반 Kmp 휴머에 누가 써놓은거 갖고오고싶네 [2] ㅇㅇ(211.234) 05.07 223 0
44475 일반 고등부 정올 [6] ㅇㅇ(123.142) 05.07 286 0
44474 일기 진짜 6달 반동안 열심히 달려왔다 [3] ㅇㅇ(61.43) 05.07 358 11
44473 일반 백준 제출하면 403 뜨는데 점마 와이러노? 00(172.226) 05.07 145 0
44472 일반 ps 대회 가면 사람들 외모가 다 왜 이러냐 [8] ㅇㅇ(223.39) 05.07 561 10
44471 일반 라빈카프가 그렇게 좋다는데 [4] ㅇㅇ(211.234) 05.07 264 1
44470 일반 대안이 없는게 문제 [5] ㅇㅇ(118.235) 05.07 279 0
44469 일기 하지만백준망하면안된다 [2] EN_SA갤로그로 이동합니다. 05.07 342 3
44468 일반 백준 그냥 좀 개 씨발임 [10] ㅇㅇ(211.234) 05.07 618 15
44465 일반 python이랑 pypy 재귀 메모리 다른건 이해하겠는데 [3] ㅇㅇ(106.101) 05.07 210 0
44464 일반 스트릭 1024떴네 [4] ㅇㅇ(223.38) 05.07 296 3
44463 일반 이거 질병이지? [4] ㅇㅇ(119.200) 05.07 502 19
44462 일반 여긴 떡밥이 달라지질 않네 ㅋㅋㅋ ㅇㅇ(118.235) 05.07 244 1
44461 일반 골랜디 하는 사람들 보통 어떻게 함? [4] ㅇㅇ(121.55) 05.07 245 0
44460 일반 ps가 전공 수업에 도움되긴하네 [1] ㅇㅇ(106.102) 05.07 245 0
44459 일반 좋은 검수자의 팩터는 성실성이랑 레이팅임 [8] ㅇㅇ(107.115) 05.07 569 4
44458 일반 kmp 구현이 헷갈리는 피붕이들 주목! [3] ㅇㅇ(125.243) 05.07 290 5
44457 일반 코포 뉴비 질문 [1] ㅇㅇ(221.151) 05.07 126 0
44456 일반 별 찍기<~ 이거 [11] ㅇㅇ(220.118) 05.07 286 2
44455 일반 kmp 일단 구조대충 외워서 쓰다가 바킹독 블로그 다시 읽어보고 ㅇㅇ(182.215) 05.07 186 0
44454 일반 저번 div3때 깨달은거 [2] ㅇㅇ(211.217) 05.06 214 0
44453 일반 Kmp 개쉬운데 이게 이해가 안 되냐? [1] ㅇㅇ(223.33) 05.06 262 3
44452 일반 대회 검수 어쩌구 나오면 진짜 귀신같네 ㅋㅋㅋ [3] ㅇㅇ(106.101) 05.06 508 6
44451 일반 뉴비 3일차 브1달성! [6] ㅇㅇ(220.118) 05.06 236 17
44449 일반 갠적으로 검수진은 꼼꼼하고 성실한 사람을 뽑아야 한다고 생각함 [6] ㅇㅇ(223.38) 05.06 796 21
44448 일반 1000문제 풀었다 [5] p(58.29) 05.06 278 4
44446 일반 라이벌 박힐려면 어케해야됨? [3] ㅇㅇ(221.151) 05.06 225 0
44445 질문 백준 메모리랑 시간보고 뭘 생각해야 할까요? [6] ㅇㅇ갤로그로 이동합니다. 05.06 186 0
44444 일반 dp는 왤캐 dp아닌거 같은데 dp지 [2] ㅇㅇ(106.101) 05.06 175 0
44443 일반 폴라드로 얘 최적화 안되려나 [5] 물감비갤로그로 이동합니다. 05.06 225 0
44442 일반 Is K rated? [3] ㅇㅇ(185.120) 05.06 447 6
44441 일반 K 언레될까 [3] ㅇㅇ(106.101) 05.06 341 0
44440 일반 백준 무한로그인 어떻게 해결하나요? [2] 련근볶음갤로그로 이동합니다. 05.06 168 0
44439 일반 플로이드 워셜은 머리에 잘 들어오는데 다익스트라는 ㄹㅇ [2] ㅇㅇ(175.197) 05.06 207 0
44438 일반 아까 대회 k번 어케푸는거임? ㅇㅇ(221.151) 05.06 177 0
44437 일반 오늘 오픈콘 재밌었던 점 [12] ㅇㅇ(218.152) 05.06 757 30
44435 일반 두시간동안 코드 뭐가 틀린지 고민하다가 도저히 답이안나와서 [6] ㅇㅇ(106.101) 05.06 214 0
44434 일반 뉴비 아이디어는 짰는데 구현이 안되네 도와주셈 [6] ㅇㅇ(220.118) 05.06 188 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2