답안 #491522

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
491522 2021-12-02T21:17:38 Z leaked 새 집 (APIO18_new_home) C++14
47 / 100
3713 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>cntt(sz(ts),-1);
    vec<int>sta(q,-1);
    for(auto &z : arr){
        cur_t=z[0];
        swap(z[1],z[2]);
        cntt[z[0]]=total;
        if(z[2]==2){
//            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]);
        }
        cntt[z[0]]=total;
//        cout<<z[0]<<' '<<total<<endl;
    }
//    for(auto &z : mp){
//
//    }
    ///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(cntt[my_t]!=k){
            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 218440 KB Output is correct
2 Correct 119 ms 218488 KB Output is correct
3 Correct 110 ms 218436 KB Output is correct
4 Correct 113 ms 218396 KB Output is correct
5 Correct 116 ms 218572 KB Output is correct
6 Correct 120 ms 219648 KB Output is correct
7 Correct 122 ms 219560 KB Output is correct
8 Correct 117 ms 219736 KB Output is correct
9 Correct 116 ms 219592 KB Output is correct
10 Correct 119 ms 219712 KB Output is correct
11 Correct 118 ms 219420 KB Output is correct
12 Correct 118 ms 219428 KB Output is correct
13 Correct 122 ms 219204 KB Output is correct
14 Correct 116 ms 219244 KB Output is correct
15 Correct 118 ms 219564 KB Output is correct
16 Correct 117 ms 219624 KB Output is correct
17 Correct 117 ms 219608 KB Output is correct
18 Correct 117 ms 219588 KB Output is correct
19 Correct 117 ms 219672 KB Output is correct
20 Correct 119 ms 219608 KB Output is correct
21 Correct 114 ms 218692 KB Output is correct
22 Correct 117 ms 219588 KB Output is correct
23 Correct 129 ms 219660 KB Output is correct
24 Correct 123 ms 219760 KB Output is correct
25 Correct 120 ms 219716 KB Output is correct
26 Correct 123 ms 219680 KB Output is correct
27 Correct 114 ms 218692 KB Output is correct
28 Correct 118 ms 219460 KB Output is correct
29 Correct 115 ms 219416 KB Output is correct
30 Correct 115 ms 219104 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 112 ms 218440 KB Output is correct
2 Correct 119 ms 218488 KB Output is correct
3 Correct 110 ms 218436 KB Output is correct
4 Correct 113 ms 218396 KB Output is correct
5 Correct 116 ms 218572 KB Output is correct
6 Correct 120 ms 219648 KB Output is correct
7 Correct 122 ms 219560 KB Output is correct
8 Correct 117 ms 219736 KB Output is correct
9 Correct 116 ms 219592 KB Output is correct
10 Correct 119 ms 219712 KB Output is correct
11 Correct 118 ms 219420 KB Output is correct
12 Correct 118 ms 219428 KB Output is correct
13 Correct 122 ms 219204 KB Output is correct
14 Correct 116 ms 219244 KB Output is correct
15 Correct 118 ms 219564 KB Output is correct
16 Correct 117 ms 219624 KB Output is correct
17 Correct 117 ms 219608 KB Output is correct
18 Correct 117 ms 219588 KB Output is correct
19 Correct 117 ms 219672 KB Output is correct
20 Correct 119 ms 219608 KB Output is correct
21 Correct 114 ms 218692 KB Output is correct
22 Correct 117 ms 219588 KB Output is correct
23 Correct 129 ms 219660 KB Output is correct
24 Correct 123 ms 219760 KB Output is correct
25 Correct 120 ms 219716 KB Output is correct
26 Correct 123 ms 219680 KB Output is correct
27 Correct 114 ms 218692 KB Output is correct
28 Correct 118 ms 219460 KB Output is correct
29 Correct 115 ms 219416 KB Output is correct
30 Correct 115 ms 219104 KB Output is correct
31 Correct 2406 ms 549628 KB Output is correct
32 Correct 271 ms 230716 KB Output is correct
33 Correct 2321 ms 536592 KB Output is correct
34 Correct 2363 ms 537492 KB Output is correct
35 Correct 2390 ms 549304 KB Output is correct
36 Correct 2267 ms 549620 KB Output is correct
37 Correct 1809 ms 508340 KB Output is correct
38 Correct 1757 ms 508664 KB Output is correct
39 Correct 1310 ms 462112 KB Output is correct
40 Correct 1367 ms 472056 KB Output is correct
41 Correct 2234 ms 489748 KB Output is correct
42 Correct 2099 ms 491844 KB Output is correct
43 Correct 226 ms 235348 KB Output is correct
44 Correct 2274 ms 484664 KB Output is correct
45 Correct 2198 ms 464856 KB Output is correct
46 Correct 2054 ms 425212 KB Output is correct
47 Correct 1081 ms 413672 KB Output is correct
48 Correct 1053 ms 406064 KB Output is correct
49 Correct 1179 ms 433092 KB Output is correct
50 Correct 1341 ms 477560 KB Output is correct
51 Correct 1206 ms 422424 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3713 ms 1048580 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2410 ms 645184 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 112 ms 218440 KB Output is correct
2 Correct 119 ms 218488 KB Output is correct
3 Correct 110 ms 218436 KB Output is correct
4 Correct 113 ms 218396 KB Output is correct
5 Correct 116 ms 218572 KB Output is correct
6 Correct 120 ms 219648 KB Output is correct
7 Correct 122 ms 219560 KB Output is correct
8 Correct 117 ms 219736 KB Output is correct
9 Correct 116 ms 219592 KB Output is correct
10 Correct 119 ms 219712 KB Output is correct
11 Correct 118 ms 219420 KB Output is correct
12 Correct 118 ms 219428 KB Output is correct
13 Correct 122 ms 219204 KB Output is correct
14 Correct 116 ms 219244 KB Output is correct
15 Correct 118 ms 219564 KB Output is correct
16 Correct 117 ms 219624 KB Output is correct
17 Correct 117 ms 219608 KB Output is correct
18 Correct 117 ms 219588 KB Output is correct
19 Correct 117 ms 219672 KB Output is correct
20 Correct 119 ms 219608 KB Output is correct
21 Correct 114 ms 218692 KB Output is correct
22 Correct 117 ms 219588 KB Output is correct
23 Correct 129 ms 219660 KB Output is correct
24 Correct 123 ms 219760 KB Output is correct
25 Correct 120 ms 219716 KB Output is correct
26 Correct 123 ms 219680 KB Output is correct
27 Correct 114 ms 218692 KB Output is correct
28 Correct 118 ms 219460 KB Output is correct
29 Correct 115 ms 219416 KB Output is correct
30 Correct 115 ms 219104 KB Output is correct
31 Correct 2406 ms 549628 KB Output is correct
32 Correct 271 ms 230716 KB Output is correct
33 Correct 2321 ms 536592 KB Output is correct
34 Correct 2363 ms 537492 KB Output is correct
35 Correct 2390 ms 549304 KB Output is correct
36 Correct 2267 ms 549620 KB Output is correct
37 Correct 1809 ms 508340 KB Output is correct
38 Correct 1757 ms 508664 KB Output is correct
39 Correct 1310 ms 462112 KB Output is correct
40 Correct 1367 ms 472056 KB Output is correct
41 Correct 2234 ms 489748 KB Output is correct
42 Correct 2099 ms 491844 KB Output is correct
43 Correct 226 ms 235348 KB Output is correct
44 Correct 2274 ms 484664 KB Output is correct
45 Correct 2198 ms 464856 KB Output is correct
46 Correct 2054 ms 425212 KB Output is correct
47 Correct 1081 ms 413672 KB Output is correct
48 Correct 1053 ms 406064 KB Output is correct
49 Correct 1179 ms 433092 KB Output is correct
50 Correct 1341 ms 477560 KB Output is correct
51 Correct 1206 ms 422424 KB Output is correct
52 Correct 1928 ms 470088 KB Output is correct
53 Correct 1961 ms 473004 KB Output is correct
54 Correct 2143 ms 532148 KB Output is correct
55 Correct 2176 ms 487556 KB Output is correct
56 Correct 2067 ms 492084 KB Output is correct
57 Correct 2208 ms 484328 KB Output is correct
58 Correct 2128 ms 491804 KB Output is correct
59 Correct 2063 ms 497376 KB Output is correct
60 Correct 2153 ms 488064 KB Output is correct
61 Correct 344 ms 250092 KB Output is correct
62 Correct 1863 ms 495456 KB Output is correct
63 Correct 2196 ms 521072 KB Output is correct
64 Correct 2298 ms 535840 KB Output is correct
65 Correct 2376 ms 545748 KB Output is correct
66 Correct 2318 ms 504264 KB Output is correct
67 Correct 352 ms 235636 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 112 ms 218440 KB Output is correct
2 Correct 119 ms 218488 KB Output is correct
3 Correct 110 ms 218436 KB Output is correct
4 Correct 113 ms 218396 KB Output is correct
5 Correct 116 ms 218572 KB Output is correct
6 Correct 120 ms 219648 KB Output is correct
7 Correct 122 ms 219560 KB Output is correct
8 Correct 117 ms 219736 KB Output is correct
9 Correct 116 ms 219592 KB Output is correct
10 Correct 119 ms 219712 KB Output is correct
11 Correct 118 ms 219420 KB Output is correct
12 Correct 118 ms 219428 KB Output is correct
13 Correct 122 ms 219204 KB Output is correct
14 Correct 116 ms 219244 KB Output is correct
15 Correct 118 ms 219564 KB Output is correct
16 Correct 117 ms 219624 KB Output is correct
17 Correct 117 ms 219608 KB Output is correct
18 Correct 117 ms 219588 KB Output is correct
19 Correct 117 ms 219672 KB Output is correct
20 Correct 119 ms 219608 KB Output is correct
21 Correct 114 ms 218692 KB Output is correct
22 Correct 117 ms 219588 KB Output is correct
23 Correct 129 ms 219660 KB Output is correct
24 Correct 123 ms 219760 KB Output is correct
25 Correct 120 ms 219716 KB Output is correct
26 Correct 123 ms 219680 KB Output is correct
27 Correct 114 ms 218692 KB Output is correct
28 Correct 118 ms 219460 KB Output is correct
29 Correct 115 ms 219416 KB Output is correct
30 Correct 115 ms 219104 KB Output is correct
31 Correct 2406 ms 549628 KB Output is correct
32 Correct 271 ms 230716 KB Output is correct
33 Correct 2321 ms 536592 KB Output is correct
34 Correct 2363 ms 537492 KB Output is correct
35 Correct 2390 ms 549304 KB Output is correct
36 Correct 2267 ms 549620 KB Output is correct
37 Correct 1809 ms 508340 KB Output is correct
38 Correct 1757 ms 508664 KB Output is correct
39 Correct 1310 ms 462112 KB Output is correct
40 Correct 1367 ms 472056 KB Output is correct
41 Correct 2234 ms 489748 KB Output is correct
42 Correct 2099 ms 491844 KB Output is correct
43 Correct 226 ms 235348 KB Output is correct
44 Correct 2274 ms 484664 KB Output is correct
45 Correct 2198 ms 464856 KB Output is correct
46 Correct 2054 ms 425212 KB Output is correct
47 Correct 1081 ms 413672 KB Output is correct
48 Correct 1053 ms 406064 KB Output is correct
49 Correct 1179 ms 433092 KB Output is correct
50 Correct 1341 ms 477560 KB Output is correct
51 Correct 1206 ms 422424 KB Output is correct
52 Runtime error 3713 ms 1048580 KB Execution killed with signal 9
53 Halted 0 ms 0 KB -