답안 #491524

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
491524 2021-12-02T21:27:36 Z leaked 새 집 (APIO18_new_home) C++14
47 / 100
3739 ms 1048580 KB
#include <bits/stdc++.h>

#define f first
#define s second
#define sz(x) (int)(x).size()
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define vec vector
#define pw(x) (1LL<<(x))
#define m_p make_pair
#define fast_iati ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);

using namespace std;

template <class T> bool umin(T &a,const T &b){return (a>b?a=b,1:0);}
template <class T> bool umax(T &a,const T &b){return (a<b?a=b,1:0);}
typedef long long ll;
typedef pair<int,int> pii;

const int lg=log2(300'000)+1;
const int N=pw(lg);
bool del[5*N];
struct segtree{
    vec<int> uk[2*N][2];
    vec<int> pos[2*N];
    vec<int> mx[2*N];
    int type=0;
    void build(int v,int tl,int tr){
        /// my positions are like that
        if(type){
            for(int i=sz(pos[v])-2;i>=0;i--)
                umax(mx[v][i],mx[v][i+1]);
            if(tl==tr)
                return;
            for(int t=0;t<2;t++){
                uk[v][t].resize(sz(pos[v]));
                int u=2*v+t;
                int j=sz(pos[u]);
                for(int i=sz(pos[v])-1;i>=0;i--){
                    while(j!=0 && pos[u][j-1]>=pos[v][i]) --j;
                    uk[v][t][i]=j;
                }
            }
        }
        else{

            for(int i=1;i<sz(pos[v]);i++)
                umax(mx[v][i],mx[v][i-1]);
//            cout<<"BUILD "<<v<<endl;
//            for(auto &z : pos[v])
//                cout<<z<<' ';
//            cout<<endl;
//            for(auto &z : mx[v])
//                cout<<z<<' ';
//            cout<<endl;
            if(tl==tr)
                return;
            for(int t=0;t<2;t++){
                uk[v][t].resize(sz(pos[v]));
                int u=2*v+t;
                int j=-1;
                for(int i=0;i<sz(pos[v]);i++){
                    while(j+1!=sz(pos[u]) && pos[u][j+1]<=pos[v][i]) ++j;
                    uk[v][t][i]=j;
                }
            }
        }
        int tm=(tl+tr)>>1;
        build(2*v,tl,tm);build(2*v+1,tm+1,tr);
    }
    void add(int l,int r,int i,int x,int v,int tl,int tr){
        if(tl>r||tr<l)
            return;
        if(!sz(pos[v]) || pos[v].back()!=i)
            pos[v].pb(i),mx[v].pb(-1e9);
//        cout<<"ADDED "<<i<<' '<<x<<' '<<l<<' '<<r<<' '<<tl<<' '<<tr<<'\n';
        if(tl>=l&&tr<=r){
//            cout<<"_SET "<<v<<' '<<sz(mx[v])-1<<' '<<i<<' '<<x<<endl;
            umax(mx[v].back(),x);
            return;
        }
        int tm=(tl+tr)>>1;
        add(l,r,i,x,2*v,tl,tm);add(l,r,i,x,2*v+1,tm+1,tr);
    }
    int get(int _t,int j,int v,int tl,int tr){
        if(_t>tr || _t<tl)
            return -1e9;
        if(j==-1 || j==sz(pos[v]))
            return -1e9;
        int ans=mx[v][j];
        if(tl==tr){
            return ans;
        }
        int tm=(tl+tr)>>1;
        if(tm>=_t)
            return max(ans,get(_t,uk[v][0][j],2*v,tl,tm));
        else
            return max(ans,get(_t,uk[v][1][j],2*v+1,tm+1,tr));
    }
}lft,rgt;
vec<int> ts;
map<pii,int>mp;
int vr[4*N];
int tmr,cur_t=-1;
vec<array<int,4>>addls;
vec<array<int,4>>addrs;
void add(int l,int r,int t,int tp){
    if(l==r) return;
    int mid=(l+r)>>1;
    if(!t){
        int st=vr[mp[{l,tp}]],_end=(cur_t)-1;
        mp.erase({l,tp});
//        cout<<"ADDITIOn "<<l<<' '<<' '<<r<<' '<<st<<' '<<_end<<endl;
        addls.pb({mid,st,_end,-l});
//        cout<<"WHAT "<<mid<<' '<<r<<' '<<st<<' '<<_end<<endl;
        addrs.pb({mid+1,st,_end,r});
        return;
    }
//    cout<<"CHE "<<l<<' '<<r<<endl;
    mp[{l,tp}]=tmr;
    vr[tmr]=cur_t;
    ++tmr;
}
const int Nax=3e5+1;
multiset<int> st[Nax];
vec<int>here[Nax];
signed main(){
    fast_iati;
    lft.type=1;rgt.type=0;
    int n,q,k;
//    n=15;k=4;q=15;
    cin>>n>>k>>q;
    vec<array<int,3>>arr;
    vec<int>x(n),a(n),b(n),t(n);
    for(int i=0;i<n;i++){
        cin>>x[i]>>t[i]>>a[i]>>b[i];
//        x[i]=rand(),t[i]=rand()%k+1;
//        a[i]=rand(),b[i]=rand();
//        if(a[i]>b[i])
//            swap(a[i],b[i]);
//        kek.pb(x[i]);
        ts.pb(a[i]);
        ts.pb(b[i]+1);
        arr.pb({a[i],0,i});
        arr.pb({b[i]+1,1,i});
        --t[i];
        here[t[i]].pb(i);
    }
    vec<int>l(q),y(q);
    for(int i=0;i<q;i++){
        cin>>l[i]>>y[i];
//        l[i]=rand(),y[i]=rand();
        ts.pb(y[i]);
        arr.pb({y[i],2,i});
    }
    ts.pb(-2e9);
    sort(all(ts));ts.erase(unique(all(ts)),ts.end());
    sort(all(arr));
    auto stupid=[&](array<int,3> z){
        pii me={-1e9,0};
        int tx=l[z[1]];
        for(int j=0;j<k;j++){
            if(sz(st[j])==2) continue;
            auto it=st[j].lower_bound(tx);
            int omn=2e9;
            if(it!=st[j].end()) umin(omn,*it-tx);
            if(it!=st[j].begin()) umin(omn,tx-*prev(it));
//            cout<<"COLOUR "<<j<<' '<<omn<<' '<<tx<<endl;
            umax(me.f,omn);me.s++;
        }
        return me;
    };
    int uk=0;
    for(auto &z : arr){
        while(uk+1<sz(ts) && ts[uk+1]<=z[0]) ++uk;
//        cout<<"ALO "<<z[0]<<' '<<uk<<' '<<ts[uk]<<endl;
        z[0]=uk;
    }
    vec<int>cnt(k,0);
    cur_t=0;
    for(int i=0;i<k;i++){
        add(-3e8,3e8,1,i);
        st[i].insert(-3e8);st[i].insert(3e8);
    }
    int total=0;
    vec<int>sta(q,-1);
    vec<bool>bad(q,0);
    for(auto &z : arr){
        cur_t=z[0];
        swap(z[1],z[2]);
        if(z[2]==2){
            bad[z[1]]=(total==k?0:1);
//            cout<<"ALO "<<
//            sta[z[1]]=(total==k?stupid(z).f:-1);
            continue;
        }
//        cout<<"TYPE "<<t[z[1]]<<endl;
        if(z[2]==1){
            int i=z[1];
            auto it=st[t[i]].lower_bound(x[i]);
            add(x[i],*next(it),0,t[i]);
            add(*prev(it),x[i],0,t[i]);
            add(*prev(it),*next(it),1,t[i]);
            st[t[i]].erase(it);
            cnt[t[i]]--;
            if(!cnt[t[i]])
                total--;
//            cout<<"DEL "<<x[i]<<endl;
        }
        else{
            int i=z[1];
//            cout<<"ADD "<<x[i]<<endl;
            if(!cnt[t[i]])
                total++;
            cnt[t[i]]++;
            st[t[i]].insert(x[i]);
            auto it=st[t[i]].lower_bound(x[i]);
            add(*prev(it),*next(it),0,t[i]);
            add(x[i],*next(it),1,t[i]);
            add(*prev(it),x[i],1,t[i]);
        }
//        cout<<z[0]<<' '<<total<<endl;
    }
    ///building
    sort(all(addls));sort(all(addrs));
    for(auto &z : addls)
        lft.add(z[1],z[2],z[0],z[3],1,0,sz(ts)-1);
//    cout<<endl;
    for(auto &z : addrs)
        rgt.add(z[1],z[2],z[0],z[3],1,0,sz(ts)-1);
    lft.build(1,0,sz(ts)-1);
//    cout<<endl;cout<<endl;
    rgt.build(1,0,sz(ts)-1);

    for(int i=0;i<q;i++){
//        if(cntt[])
        int j=l[i];
        int my_t=lower_bound(all(ts),y[i])-ts.begin();
//        cout<<"STUPID "<<sta[i]<<' ';
        if(bad[i]){
            cout<<-1<<'\n';
            continue;
        }
        int id=lower_bound(all(lft.pos[1]),j)-lft.pos[1].begin();
        int ans=max(0,j+lft.get(my_t,id,1,0,sz(ts)-1));
//        cout<<"ALO "<<ans<<endl;
        id=upper_bound(all(rgt.pos[1]),j)-rgt.pos[1].begin()-1;
//        cout<<"DEBUGID "<<id<<endl;
        umax(ans,-j+rgt.get(my_t,id,1,0,sz(ts)-1));
        if(ans>1e8)
            ans=-1;
        cout<<ans<<'\n';
    }
    return 0;
}
/*

4 2 4
3 1 1 10
9 2 2 4
7 2 5 7
4 1 8 10
5 3
5 6
5 9
1 10


2 1 3
1 1 1 4
1 1 2 6
1 3
1 5
1 7

1 1 1
100000000 1 1 1
1 1
*/

Compilation message

new_home.cpp: In function 'int main()':
new_home.cpp:160:10: warning: variable 'stupid' set but not used [-Wunused-but-set-variable]
  160 |     auto stupid=[&](array<int,3> z){
      |          ^~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 112 ms 218436 KB Output is correct
2 Correct 119 ms 218436 KB Output is correct
3 Correct 121 ms 218408 KB Output is correct
4 Correct 110 ms 218436 KB Output is correct
5 Correct 114 ms 218568 KB Output is correct
6 Correct 119 ms 219664 KB Output is correct
7 Correct 117 ms 219576 KB Output is correct
8 Correct 118 ms 219736 KB Output is correct
9 Correct 115 ms 219592 KB Output is correct
10 Correct 119 ms 219768 KB Output is correct
11 Correct 129 ms 219460 KB Output is correct
12 Correct 119 ms 219524 KB Output is correct
13 Correct 115 ms 219204 KB Output is correct
14 Correct 117 ms 219268 KB Output is correct
15 Correct 117 ms 219584 KB Output is correct
16 Correct 121 ms 219668 KB Output is correct
17 Correct 142 ms 219660 KB Output is correct
18 Correct 116 ms 219624 KB Output is correct
19 Correct 119 ms 219680 KB Output is correct
20 Correct 121 ms 219656 KB Output is correct
21 Correct 123 ms 218684 KB Output is correct
22 Correct 118 ms 219588 KB Output is correct
23 Correct 127 ms 219664 KB Output is correct
24 Correct 117 ms 219716 KB Output is correct
25 Correct 124 ms 219864 KB Output is correct
26 Correct 118 ms 219464 KB Output is correct
27 Correct 113 ms 218692 KB Output is correct
28 Correct 118 ms 219388 KB Output is correct
29 Correct 119 ms 219420 KB Output is correct
30 Correct 128 ms 219168 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 112 ms 218436 KB Output is correct
2 Correct 119 ms 218436 KB Output is correct
3 Correct 121 ms 218408 KB Output is correct
4 Correct 110 ms 218436 KB Output is correct
5 Correct 114 ms 218568 KB Output is correct
6 Correct 119 ms 219664 KB Output is correct
7 Correct 117 ms 219576 KB Output is correct
8 Correct 118 ms 219736 KB Output is correct
9 Correct 115 ms 219592 KB Output is correct
10 Correct 119 ms 219768 KB Output is correct
11 Correct 129 ms 219460 KB Output is correct
12 Correct 119 ms 219524 KB Output is correct
13 Correct 115 ms 219204 KB Output is correct
14 Correct 117 ms 219268 KB Output is correct
15 Correct 117 ms 219584 KB Output is correct
16 Correct 121 ms 219668 KB Output is correct
17 Correct 142 ms 219660 KB Output is correct
18 Correct 116 ms 219624 KB Output is correct
19 Correct 119 ms 219680 KB Output is correct
20 Correct 121 ms 219656 KB Output is correct
21 Correct 123 ms 218684 KB Output is correct
22 Correct 118 ms 219588 KB Output is correct
23 Correct 127 ms 219664 KB Output is correct
24 Correct 117 ms 219716 KB Output is correct
25 Correct 124 ms 219864 KB Output is correct
26 Correct 118 ms 219464 KB Output is correct
27 Correct 113 ms 218692 KB Output is correct
28 Correct 118 ms 219388 KB Output is correct
29 Correct 119 ms 219420 KB Output is correct
30 Correct 128 ms 219168 KB Output is correct
31 Correct 2495 ms 548984 KB Output is correct
32 Correct 293 ms 232808 KB Output is correct
33 Correct 2267 ms 536024 KB Output is correct
34 Correct 2449 ms 536448 KB Output is correct
35 Correct 2492 ms 548632 KB Output is correct
36 Correct 2370 ms 548952 KB Output is correct
37 Correct 1852 ms 507688 KB Output is correct
38 Correct 1782 ms 507744 KB Output is correct
39 Correct 1370 ms 461036 KB Output is correct
40 Correct 1426 ms 471328 KB Output is correct
41 Correct 2272 ms 489020 KB Output is correct
42 Correct 2186 ms 491492 KB Output is correct
43 Correct 239 ms 235416 KB Output is correct
44 Correct 2266 ms 484108 KB Output is correct
45 Correct 2202 ms 464044 KB Output is correct
46 Correct 1982 ms 424432 KB Output is correct
47 Correct 1081 ms 413160 KB Output is correct
48 Correct 1062 ms 405224 KB Output is correct
49 Correct 1176 ms 432404 KB Output is correct
50 Correct 1358 ms 476764 KB Output is correct
51 Correct 1238 ms 421748 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3739 ms 1048580 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2439 ms 632956 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 112 ms 218436 KB Output is correct
2 Correct 119 ms 218436 KB Output is correct
3 Correct 121 ms 218408 KB Output is correct
4 Correct 110 ms 218436 KB Output is correct
5 Correct 114 ms 218568 KB Output is correct
6 Correct 119 ms 219664 KB Output is correct
7 Correct 117 ms 219576 KB Output is correct
8 Correct 118 ms 219736 KB Output is correct
9 Correct 115 ms 219592 KB Output is correct
10 Correct 119 ms 219768 KB Output is correct
11 Correct 129 ms 219460 KB Output is correct
12 Correct 119 ms 219524 KB Output is correct
13 Correct 115 ms 219204 KB Output is correct
14 Correct 117 ms 219268 KB Output is correct
15 Correct 117 ms 219584 KB Output is correct
16 Correct 121 ms 219668 KB Output is correct
17 Correct 142 ms 219660 KB Output is correct
18 Correct 116 ms 219624 KB Output is correct
19 Correct 119 ms 219680 KB Output is correct
20 Correct 121 ms 219656 KB Output is correct
21 Correct 123 ms 218684 KB Output is correct
22 Correct 118 ms 219588 KB Output is correct
23 Correct 127 ms 219664 KB Output is correct
24 Correct 117 ms 219716 KB Output is correct
25 Correct 124 ms 219864 KB Output is correct
26 Correct 118 ms 219464 KB Output is correct
27 Correct 113 ms 218692 KB Output is correct
28 Correct 118 ms 219388 KB Output is correct
29 Correct 119 ms 219420 KB Output is correct
30 Correct 128 ms 219168 KB Output is correct
31 Correct 2495 ms 548984 KB Output is correct
32 Correct 293 ms 232808 KB Output is correct
33 Correct 2267 ms 536024 KB Output is correct
34 Correct 2449 ms 536448 KB Output is correct
35 Correct 2492 ms 548632 KB Output is correct
36 Correct 2370 ms 548952 KB Output is correct
37 Correct 1852 ms 507688 KB Output is correct
38 Correct 1782 ms 507744 KB Output is correct
39 Correct 1370 ms 461036 KB Output is correct
40 Correct 1426 ms 471328 KB Output is correct
41 Correct 2272 ms 489020 KB Output is correct
42 Correct 2186 ms 491492 KB Output is correct
43 Correct 239 ms 235416 KB Output is correct
44 Correct 2266 ms 484108 KB Output is correct
45 Correct 2202 ms 464044 KB Output is correct
46 Correct 1982 ms 424432 KB Output is correct
47 Correct 1081 ms 413160 KB Output is correct
48 Correct 1062 ms 405224 KB Output is correct
49 Correct 1176 ms 432404 KB Output is correct
50 Correct 1358 ms 476764 KB Output is correct
51 Correct 1238 ms 421748 KB Output is correct
52 Correct 1901 ms 469664 KB Output is correct
53 Correct 1962 ms 472876 KB Output is correct
54 Correct 2166 ms 531936 KB Output is correct
55 Correct 2155 ms 487272 KB Output is correct
56 Correct 2100 ms 491804 KB Output is correct
57 Correct 2234 ms 484296 KB Output is correct
58 Correct 2131 ms 491608 KB Output is correct
59 Correct 2061 ms 496760 KB Output is correct
60 Correct 2154 ms 488012 KB Output is correct
61 Correct 345 ms 250572 KB Output is correct
62 Correct 1865 ms 495092 KB Output is correct
63 Correct 2180 ms 520692 KB Output is correct
64 Correct 2268 ms 535608 KB Output is correct
65 Correct 2445 ms 545584 KB Output is correct
66 Correct 2447 ms 503956 KB Output is correct
67 Correct 382 ms 236152 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 112 ms 218436 KB Output is correct
2 Correct 119 ms 218436 KB Output is correct
3 Correct 121 ms 218408 KB Output is correct
4 Correct 110 ms 218436 KB Output is correct
5 Correct 114 ms 218568 KB Output is correct
6 Correct 119 ms 219664 KB Output is correct
7 Correct 117 ms 219576 KB Output is correct
8 Correct 118 ms 219736 KB Output is correct
9 Correct 115 ms 219592 KB Output is correct
10 Correct 119 ms 219768 KB Output is correct
11 Correct 129 ms 219460 KB Output is correct
12 Correct 119 ms 219524 KB Output is correct
13 Correct 115 ms 219204 KB Output is correct
14 Correct 117 ms 219268 KB Output is correct
15 Correct 117 ms 219584 KB Output is correct
16 Correct 121 ms 219668 KB Output is correct
17 Correct 142 ms 219660 KB Output is correct
18 Correct 116 ms 219624 KB Output is correct
19 Correct 119 ms 219680 KB Output is correct
20 Correct 121 ms 219656 KB Output is correct
21 Correct 123 ms 218684 KB Output is correct
22 Correct 118 ms 219588 KB Output is correct
23 Correct 127 ms 219664 KB Output is correct
24 Correct 117 ms 219716 KB Output is correct
25 Correct 124 ms 219864 KB Output is correct
26 Correct 118 ms 219464 KB Output is correct
27 Correct 113 ms 218692 KB Output is correct
28 Correct 118 ms 219388 KB Output is correct
29 Correct 119 ms 219420 KB Output is correct
30 Correct 128 ms 219168 KB Output is correct
31 Correct 2495 ms 548984 KB Output is correct
32 Correct 293 ms 232808 KB Output is correct
33 Correct 2267 ms 536024 KB Output is correct
34 Correct 2449 ms 536448 KB Output is correct
35 Correct 2492 ms 548632 KB Output is correct
36 Correct 2370 ms 548952 KB Output is correct
37 Correct 1852 ms 507688 KB Output is correct
38 Correct 1782 ms 507744 KB Output is correct
39 Correct 1370 ms 461036 KB Output is correct
40 Correct 1426 ms 471328 KB Output is correct
41 Correct 2272 ms 489020 KB Output is correct
42 Correct 2186 ms 491492 KB Output is correct
43 Correct 239 ms 235416 KB Output is correct
44 Correct 2266 ms 484108 KB Output is correct
45 Correct 2202 ms 464044 KB Output is correct
46 Correct 1982 ms 424432 KB Output is correct
47 Correct 1081 ms 413160 KB Output is correct
48 Correct 1062 ms 405224 KB Output is correct
49 Correct 1176 ms 432404 KB Output is correct
50 Correct 1358 ms 476764 KB Output is correct
51 Correct 1238 ms 421748 KB Output is correct
52 Runtime error 3739 ms 1048580 KB Execution killed with signal 9
53 Halted 0 ms 0 KB -