답안 #1092591

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1092591 2024-09-24T14:25:28 Z damoon Pyramid Base (IOI08_pyramid_base) C++14
0 / 100
139 ms 262144 KB
#include<bits/stdc++.h>
using namespace std;

#define ll long long

typedef pair<int,int> pii;
typedef pair<int,pii> pip;
typedef pair<pii,int> ppi;
#define f first
#define s second

#define all(x) x.begin(),x.end()
#define unicorn(x) x.resize(unique(x.begin(),x.end())-x.begin())

#define pb(x) push_back(x);
#define pp() pop_back();

#define lc 2*id+0
#define rc 2*id+1

const int LC = 1e6+10, L = 4e5+10;
const ll inf = 1e10;
int n,m,p,b;
vector<int> ev;

struct obs{
    int l,r,c;
    obs(int a,int b,int pr){
        l = a;
        r = b;
        c = pr;
    }
};
vector<obs> add[LC],er[LC];

random_device device;
default_random_engine rng(device());
#define randt(a,b) uniform_int_distribution<int64_t>(a,b)(rng)

void pr(int* vv,int l,int r){for(int i=l;i<r;i++){cout<<vv[i]<<" ";}cout<<endl;}
void prv(vector<int> vv){for(auto i:vv){cout<<i<<" ";}cout<<endl;}
void prl(long long* vv,int l,int r){for(int i=l;i<r;i++){cout<<vv[i]<<" ";}cout<<endl;}
void prvl(vector<long long> vv){for(auto i:vv){cout<<i<<" ";}cout<<endl;}
void prp(pii* vv,int l,int r){for(int i=l;i<r;i++){cout<<i<<": "<<vv[i].f<<" , "<<vv[i].s<<" / ";}cout<<endl;}

struct sagi{
    struct node{
        ll lazy, mn;
        node(){
            lazy = mn = 0;
        }
    }t[LC<<6];

    inline void spread(int id){
        t[lc].lazy += t[id].lazy;
        t[rc].lazy += t[id].lazy;
        t[id].mn += t[id].lazy;
        t[id].lazy = 0;
    }
    inline void update(int id,int l,int r,int l2,int r2,ll x){
        spread(id);
        if(l==l2 and r==r2){
            t[id].lazy += x;
            return;
        }
        int mid = (l2+r2)>>1;
        if(l<mid)
            update(lc,l,min(r,mid),l2,mid,x);
        if(r>mid)
            update(rc,max(l,mid),r,mid,r2,x);
        spread(lc);
        spread(rc);
        t[id].mn = min(t[lc].mn, t[rc].mn);
    }

    inline ll get(int id,int l,int r,int l2,int r2){
        spread(id);
        if(l==l2 and r==r2){
            return t[id].mn;
        }
        int mid = (l2+r2)>>1;
        ll ans = inf;
        if(l<mid)
            ans = min(ans, get(lc,l,min(r,mid),l2,mid));
        if(r>mid)
            ans = min(ans, get(rc,max(l,mid),r,mid,r2));
        return ans;
    }
};

int main(){
    //ofstream cout ("out.txt");
    //ifstream cin ("in.txt");

    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin>>n>>m>>b>>p;

    for(int i=0;i<p;i++){
        int x1,y1,x2,y2,pr;
        scanf("%d %d %d %d %d",&x1,&y1,&x2,&y2,&pr);
        obs x(y1,y2,pr);
        ev.pb(x1);
        ev.pb(x2);
        add[x1].pb(x);
        er[x2].pb(x);
    }

    sort(all(ev));
    unicorn(ev);
    int l=0,r=1e6+1;
    while(r-l>1){
        int mid = (l+r)>>1;
        if(mid > n or mid > m){
            r = mid;
            continue;
        }
        //cout<<"mid: "<<mid<<endl;
        sagi seg;
        seg.update(1,1,mid,1,m+1,inf);
        ll ans = inf;
        for(int i=1;i<=n;i++){
            //cout<<"ev: "<<i<<endl;
            if(i>mid){
                ans = min(ans,seg.t[1].mn);
            }
            for(auto j:add[i]){
                //cout<<"  add: "<<j.l<<"  "<<j.r<<"  "<<j.c<<" / "<<max(j.l,mid)<<"  "<<min(j.r+mid,m+1)<<endl;
                seg.update(1,max(j.l,mid),min(j.r+mid,m+1),1,m+1,j.c);
            }

            for(auto j:er[max(i-mid,0)]){
                //cout<<"  ere: "<<j.l<<"  "<<j.r<<"  "<<j.c<<endl;
                seg.update(1,max(j.l,mid),min(j.r+mid,m+1),1,m+1,-j.c);
            }

            if(i>mid){
                ans = min(ans,seg.t[1].mn);
            }
            //cout<<"  res: "<<seg.t[1].mn<<endl;
            //cout<<"= = = = = = = = = = = "<<endl;
        }
        //cout<<"l,r: "<<l<<","<<r<<" / mid: "<<mid<<" / ans: "<<ans<<endl;
        if(ans <= b)
            l = mid;
        else
            r = mid;
        //cout<<"---------------------"<<endl;
    }
    cout<<l<<endl;

}

Compilation message

pyramid_base.cpp: In function 'int main()':
pyramid_base.cpp:103:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  103 |         scanf("%d %d %d %d %d",&x1,&y1,&x2,&y2,&pr);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 119 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 120 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 125 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 133 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 139 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 120 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 112 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 111 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 119 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 112 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 119 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 110 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 115 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 121 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 112 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -