Submission #491521

# Submission time Handle Problem Language Result Execution time Memory
491521 2021-12-02T21:15:41 Z leaked New Home (APIO18_new_home) C++14
47 / 100
3812 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[3*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){
      |          ^~~~~~
# Verdict Execution time Memory Grader output
1 Correct 112 ms 218436 KB Output is correct
2 Correct 112 ms 218424 KB Output is correct
3 Correct 110 ms 218388 KB Output is correct
4 Correct 115 ms 218392 KB Output is correct
5 Correct 114 ms 218504 KB Output is correct
6 Correct 117 ms 219696 KB Output is correct
7 Correct 116 ms 219588 KB Output is correct
8 Correct 128 ms 219676 KB Output is correct
9 Correct 118 ms 219624 KB Output is correct
10 Correct 121 ms 219716 KB Output is correct
11 Correct 116 ms 219448 KB Output is correct
12 Correct 119 ms 219548 KB Output is correct
13 Correct 115 ms 219200 KB Output is correct
14 Correct 116 ms 219204 KB Output is correct
15 Correct 118 ms 219628 KB Output is correct
16 Correct 119 ms 219568 KB Output is correct
17 Correct 117 ms 219668 KB Output is correct
18 Correct 117 ms 219632 KB Output is correct
19 Correct 117 ms 219588 KB Output is correct
20 Correct 116 ms 219700 KB Output is correct
21 Correct 114 ms 218676 KB Output is correct
22 Correct 117 ms 219568 KB Output is correct
23 Correct 123 ms 219800 KB Output is correct
24 Correct 117 ms 219716 KB Output is correct
25 Correct 117 ms 219644 KB Output is correct
26 Correct 117 ms 219368 KB Output is correct
27 Correct 113 ms 218620 KB Output is correct
28 Correct 118 ms 219460 KB Output is correct
29 Correct 115 ms 219320 KB Output is correct
30 Correct 115 ms 219148 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 112 ms 218436 KB Output is correct
2 Correct 112 ms 218424 KB Output is correct
3 Correct 110 ms 218388 KB Output is correct
4 Correct 115 ms 218392 KB Output is correct
5 Correct 114 ms 218504 KB Output is correct
6 Correct 117 ms 219696 KB Output is correct
7 Correct 116 ms 219588 KB Output is correct
8 Correct 128 ms 219676 KB Output is correct
9 Correct 118 ms 219624 KB Output is correct
10 Correct 121 ms 219716 KB Output is correct
11 Correct 116 ms 219448 KB Output is correct
12 Correct 119 ms 219548 KB Output is correct
13 Correct 115 ms 219200 KB Output is correct
14 Correct 116 ms 219204 KB Output is correct
15 Correct 118 ms 219628 KB Output is correct
16 Correct 119 ms 219568 KB Output is correct
17 Correct 117 ms 219668 KB Output is correct
18 Correct 117 ms 219632 KB Output is correct
19 Correct 117 ms 219588 KB Output is correct
20 Correct 116 ms 219700 KB Output is correct
21 Correct 114 ms 218676 KB Output is correct
22 Correct 117 ms 219568 KB Output is correct
23 Correct 123 ms 219800 KB Output is correct
24 Correct 117 ms 219716 KB Output is correct
25 Correct 117 ms 219644 KB Output is correct
26 Correct 117 ms 219368 KB Output is correct
27 Correct 113 ms 218620 KB Output is correct
28 Correct 118 ms 219460 KB Output is correct
29 Correct 115 ms 219320 KB Output is correct
30 Correct 115 ms 219148 KB Output is correct
31 Correct 2440 ms 549452 KB Output is correct
32 Correct 271 ms 230672 KB Output is correct
33 Correct 2200 ms 536640 KB Output is correct
34 Correct 2351 ms 537492 KB Output is correct
35 Correct 2334 ms 549364 KB Output is correct
36 Correct 2271 ms 549792 KB Output is correct
37 Correct 1812 ms 508336 KB Output is correct
38 Correct 1757 ms 508552 KB Output is correct
39 Correct 1305 ms 461968 KB Output is correct
40 Correct 1373 ms 472140 KB Output is correct
41 Correct 2223 ms 489456 KB Output is correct
42 Correct 2093 ms 491884 KB Output is correct
43 Correct 230 ms 235332 KB Output is correct
44 Correct 2213 ms 484868 KB Output is correct
45 Correct 2113 ms 464908 KB Output is correct
46 Correct 1929 ms 425240 KB Output is correct
47 Correct 1066 ms 413748 KB Output is correct
48 Correct 1038 ms 406004 KB Output is correct
49 Correct 1191 ms 433032 KB Output is correct
50 Correct 1346 ms 477664 KB Output is correct
51 Correct 1190 ms 422412 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 3812 ms 1048580 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2373 ms 637508 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 112 ms 218436 KB Output is correct
2 Correct 112 ms 218424 KB Output is correct
3 Correct 110 ms 218388 KB Output is correct
4 Correct 115 ms 218392 KB Output is correct
5 Correct 114 ms 218504 KB Output is correct
6 Correct 117 ms 219696 KB Output is correct
7 Correct 116 ms 219588 KB Output is correct
8 Correct 128 ms 219676 KB Output is correct
9 Correct 118 ms 219624 KB Output is correct
10 Correct 121 ms 219716 KB Output is correct
11 Correct 116 ms 219448 KB Output is correct
12 Correct 119 ms 219548 KB Output is correct
13 Correct 115 ms 219200 KB Output is correct
14 Correct 116 ms 219204 KB Output is correct
15 Correct 118 ms 219628 KB Output is correct
16 Correct 119 ms 219568 KB Output is correct
17 Correct 117 ms 219668 KB Output is correct
18 Correct 117 ms 219632 KB Output is correct
19 Correct 117 ms 219588 KB Output is correct
20 Correct 116 ms 219700 KB Output is correct
21 Correct 114 ms 218676 KB Output is correct
22 Correct 117 ms 219568 KB Output is correct
23 Correct 123 ms 219800 KB Output is correct
24 Correct 117 ms 219716 KB Output is correct
25 Correct 117 ms 219644 KB Output is correct
26 Correct 117 ms 219368 KB Output is correct
27 Correct 113 ms 218620 KB Output is correct
28 Correct 118 ms 219460 KB Output is correct
29 Correct 115 ms 219320 KB Output is correct
30 Correct 115 ms 219148 KB Output is correct
31 Correct 2440 ms 549452 KB Output is correct
32 Correct 271 ms 230672 KB Output is correct
33 Correct 2200 ms 536640 KB Output is correct
34 Correct 2351 ms 537492 KB Output is correct
35 Correct 2334 ms 549364 KB Output is correct
36 Correct 2271 ms 549792 KB Output is correct
37 Correct 1812 ms 508336 KB Output is correct
38 Correct 1757 ms 508552 KB Output is correct
39 Correct 1305 ms 461968 KB Output is correct
40 Correct 1373 ms 472140 KB Output is correct
41 Correct 2223 ms 489456 KB Output is correct
42 Correct 2093 ms 491884 KB Output is correct
43 Correct 230 ms 235332 KB Output is correct
44 Correct 2213 ms 484868 KB Output is correct
45 Correct 2113 ms 464908 KB Output is correct
46 Correct 1929 ms 425240 KB Output is correct
47 Correct 1066 ms 413748 KB Output is correct
48 Correct 1038 ms 406004 KB Output is correct
49 Correct 1191 ms 433032 KB Output is correct
50 Correct 1346 ms 477664 KB Output is correct
51 Correct 1190 ms 422412 KB Output is correct
52 Correct 1886 ms 473108 KB Output is correct
53 Correct 1988 ms 475952 KB Output is correct
54 Correct 2132 ms 535208 KB Output is correct
55 Correct 2148 ms 490664 KB Output is correct
56 Correct 2102 ms 495204 KB Output is correct
57 Correct 2198 ms 487304 KB Output is correct
58 Correct 2176 ms 494968 KB Output is correct
59 Correct 2102 ms 500528 KB Output is correct
60 Correct 2173 ms 491020 KB Output is correct
61 Correct 351 ms 252544 KB Output is correct
62 Correct 1909 ms 498556 KB Output is correct
63 Correct 2205 ms 523988 KB Output is correct
64 Correct 2330 ms 538848 KB Output is correct
65 Correct 2341 ms 548908 KB Output is correct
66 Correct 2375 ms 507200 KB Output is correct
67 Correct 360 ms 236768 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 112 ms 218436 KB Output is correct
2 Correct 112 ms 218424 KB Output is correct
3 Correct 110 ms 218388 KB Output is correct
4 Correct 115 ms 218392 KB Output is correct
5 Correct 114 ms 218504 KB Output is correct
6 Correct 117 ms 219696 KB Output is correct
7 Correct 116 ms 219588 KB Output is correct
8 Correct 128 ms 219676 KB Output is correct
9 Correct 118 ms 219624 KB Output is correct
10 Correct 121 ms 219716 KB Output is correct
11 Correct 116 ms 219448 KB Output is correct
12 Correct 119 ms 219548 KB Output is correct
13 Correct 115 ms 219200 KB Output is correct
14 Correct 116 ms 219204 KB Output is correct
15 Correct 118 ms 219628 KB Output is correct
16 Correct 119 ms 219568 KB Output is correct
17 Correct 117 ms 219668 KB Output is correct
18 Correct 117 ms 219632 KB Output is correct
19 Correct 117 ms 219588 KB Output is correct
20 Correct 116 ms 219700 KB Output is correct
21 Correct 114 ms 218676 KB Output is correct
22 Correct 117 ms 219568 KB Output is correct
23 Correct 123 ms 219800 KB Output is correct
24 Correct 117 ms 219716 KB Output is correct
25 Correct 117 ms 219644 KB Output is correct
26 Correct 117 ms 219368 KB Output is correct
27 Correct 113 ms 218620 KB Output is correct
28 Correct 118 ms 219460 KB Output is correct
29 Correct 115 ms 219320 KB Output is correct
30 Correct 115 ms 219148 KB Output is correct
31 Correct 2440 ms 549452 KB Output is correct
32 Correct 271 ms 230672 KB Output is correct
33 Correct 2200 ms 536640 KB Output is correct
34 Correct 2351 ms 537492 KB Output is correct
35 Correct 2334 ms 549364 KB Output is correct
36 Correct 2271 ms 549792 KB Output is correct
37 Correct 1812 ms 508336 KB Output is correct
38 Correct 1757 ms 508552 KB Output is correct
39 Correct 1305 ms 461968 KB Output is correct
40 Correct 1373 ms 472140 KB Output is correct
41 Correct 2223 ms 489456 KB Output is correct
42 Correct 2093 ms 491884 KB Output is correct
43 Correct 230 ms 235332 KB Output is correct
44 Correct 2213 ms 484868 KB Output is correct
45 Correct 2113 ms 464908 KB Output is correct
46 Correct 1929 ms 425240 KB Output is correct
47 Correct 1066 ms 413748 KB Output is correct
48 Correct 1038 ms 406004 KB Output is correct
49 Correct 1191 ms 433032 KB Output is correct
50 Correct 1346 ms 477664 KB Output is correct
51 Correct 1190 ms 422412 KB Output is correct
52 Runtime error 3812 ms 1048580 KB Execution killed with signal 9
53 Halted 0 ms 0 KB -