디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅇㅇ(121.55) 2024.04.27 09:06:03
조회 349 추천 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 375 11
44058 공지 알고리즘 대회 공부 과정 [21] 나는최고갤로그로 이동합니다. 24.04.20 1820 31
19170 공지 규칙 v2022.02.16 [8] 0xrgb갤로그로 이동합니다. 22.02.06 6464 36
1 공지 와 PS! [24] 0xrgb갤로그로 이동합니다. 18.05.28 21621 30
44549 일반 너네 누구 고로시하고 비난하고 비방하는거 [2] ㅇㅇ(118.235) 03:51 111 1
44548 일반 오히려 치팅해서 올리는게 더 부담스러울거 같은데 [3] ㅇㅇ(221.151) 01:38 188 1
44547 일반 그사람은 PS판에서만 그런게 아니지 않나?ㅋㅋ [3] ㅇㅇ(107.217) 01:33 209 2
44546 일반 PS 졸업 못하는 이유ㅋㅋ [3] Raciel갤로그로 이동합니다. 00:05 328 14
44545 일반 9267 A+B 같은 문제들 보면 힘 빠지네 [6] ㅇㅇ(14.4) 05.09 246 0
44544 일반 최근에 hw를 해볼까 앱개발을해볼까 고민좀했는데 [1] ㅇㅇ(118.235) 05.09 128 1
44543 일반 Ps 문제 풀이 하는 과정이 다들 어떻게 됨?? [2] ㅇㅇ(220.71) 05.09 169 0
44542 일반 니들 웃긴다 [7] ㅇㅇ(211.234) 05.09 291 0
44541 일반 피붕이 클래스 10 다 밀었다 [13] ㅇㅇ(121.133) 05.09 368 24
44540 일반 과고 꼴지면 건동홍 가능하냐? [5] ㅇㅇ(106.101) 05.09 213 0
44539 일반 취준생은 솔직히 코포 블루만 찍어도 졸업임 [7] ㅇㅇ(175.116) 05.09 237 2
44538 일반 설카 행님들은 [6] ㅇㅇ(106.101) 05.09 212 0
44537 일반 c로 클래스 밀다가 비효율이라 그래서 c++ 공부중인데 [2] UEin4갤로그로 이동합니다. 05.09 121 0
44536 일반 남의코드<--읽기 더럽게힘들구나 [6] ㅇㅇ(106.101) 05.09 202 0
44535 일반 PS판에서 발 빼기 전에 [4] ㅇㅇ(1.240) 05.09 293 0
44534 일반 그분 솔브드 디코에서 민심 좋은거 아니었음? [3] ㅇㅇ(211.234) 05.09 361 0
44533 일반 내가 알기로는 ㅇㅇ(211.234) 05.09 168 0
44532 일반 그래도 주기적인 떡밥 하나 사라져서 속시원하노 [1] ㅇㅇ(118.235) 05.09 272 3
44530 질문 실력 늘리려면 남의 풀이보고 배우는게 좋음? [2] ㅇㅇ(118.235) 05.09 184 0
44529 질문 비트셋 가장 큰 켜진 비트 알아내는 방법이 for문 도는 방법밖에 없음? [15] ㅇㅇ(210.105) 05.09 252 0
44528 질문 좌표압축 응용하면 최적화된 알고리즘이 필수임? [5] ㅇㅇ갤로그로 이동합니다. 05.09 191 0
44527 일반 치팅이란게 어느수준부터 빡세게 잡냐? [10] ㅇㅇ(106.101) 05.09 333 0
44526 일반 그냥 문제마다 후원자 명단에 본인 이름이 들어가길 원했던게 아닌지 [2] ㅇㅇ(106.101) 05.09 296 0
44525 일반 CP 안하는 검수진인데 나도 각잡고 해야겠다 ㅇㅇ(223.38) 05.09 164 0
44524 질문 해시 테이블 체이닝 질문 [1] ㅇㅇ(112.154) 05.09 120 0
44523 일반 다른 대회 검수한 적 있었던 블루따리인데 [4] ㅇㅇ(180.70) 05.09 355 7
44522 일반 까이는게 네임드라서 그러는 줄 아는 사람들이 있는거 같은데... [1] ㅇㅇ(221.148) 05.09 333 10
44521 질문 누비질문) 파이썬에서 문자열 뒤집을 때 [7] ㅇㅇ(210.117) 05.09 184 0
44520 일반 그래서 저번 대회 뱃지랑 배경 언제줘요 ㅇㅇ(221.151) 05.09 111 0
44517 일반 후원 얼마나 받은지 모르는 놈들이 태반 같은디 [4] ㅇㅇ(14.4) 05.09 386 0
44516 일반 검수자 없이 대회 개최 가능함? [5] woaldudrl(211.234) 05.09 290 0
44515 일반 이제 그럼 대회 잘 안열리는거? ㅇㅇ(211.234) 05.09 156 0
44514 일반 아니 그래서 그 사람만 까이는 이유가 뭐임 [12] ㅇㅇ(211.234) 05.09 539 11
44513 일반 이제 곧 군대 가는데 [5] ㅇㅇ(221.151) 05.09 236 2
44512 일반 어 근데 신기하네요 그거 개인후원만으로 돌아감? [6] EN_SA갤로그로 이동합니다. 05.09 352 1
44511 일반 요즘 PS하는 사람들은 후원 필요 없음? [15] ㅇㅇ(118.235) 05.09 587 15
44510 일반 디버깅툴쓰니까 개편하네.. ㅇㅇ(106.101) 05.09 85 1
44509 일반 근데 왜 떡밥이 그 검수자인거임 [1] ㅇㅇ(223.38) 05.09 302 4
44508 일반 조롱이 아니라 진지하게 검수에 영향 하나도 없는거 팩트임 [1] ㅇㅇ(223.39) 05.09 449 17
44507 일반 KMP << 왤케 다양하게 활용함? [3] ㅇㅇ(59.29) 05.09 190 1
44506 일반 utilforever님 이제 알고리즘 대회 검수 후원 안하신다네 [20] ㅇㅇ(223.62) 05.09 950 22
44505 일반 고수님들 실버문제 질문점 ㅠㅠ [4] ㅇㅇ(119.195) 05.09 195 0
44504 일반 koi 온라인대회 출전해본 피붕이들 있음? [3] ㅇㅇ(182.225) 05.09 148 1
44503 일반 그래도 나는 금오공대가 부럽다 [7] ㅇㅇ(223.38) 05.09 404 20
44502 일반 프로그래머스 pccp pcce 딴 사람 있음? [6] ㅇㅇ(59.29) 05.09 208 0
44501 일기 체감 10분이 기분탓이 아니었네 [7] EN_SA갤로그로 이동합니다. 05.09 378 0
44500 일반 이거 풀라고 낸 문제임? [4] ㅇㅇ(221.151) 05.09 362 0
44499 일반 다들 하고싶은일은 있음? [4] ㅇㅇ(118.235) 05.09 271 0
44498 일반 님들 파인만 알고리즘이라고 아심? [9] ㅇㅇ(118.176) 05.08 576 24
44497 일반 금오공대는 뭔데 유명함? [7] ㅇㅇ(106.101) 05.08 459 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2