Submission #1028530

# Submission time Handle Problem Language Result Execution time Memory
1028530 2024-07-20T03:51:10 Z vjudge1 New Home (APIO18_new_home) C++17
57 / 100
5000 ms 464896 KB
#include<bits/stdc++.h>
using namespace std;
#define int long long
int ans[300100];
multiset<int>stor[300100];
map<int,int>importpos;
struct segtree{
    stack<pair<int,int>>stk;
    int vl[1<<20];
    segtree(){for(auto&i:vl)i=-1e18;}
    void update(int i,int l,int r,int ll,int rr,int v){
        if(l>rr||ll>r)return;
        if(ll<=l&&r<=rr) return stk.push({i,vl[i]}),void(vl[i]=max(vl[i],v));
        update(i*2,l,l+r>>1,ll,rr,v);
        update(i*2+1,l+r+2>>1,r,ll,rr,v);
    }
    int query(int i,int l,int r,int p){
        if(l==r) return vl[i];
        if(l+r>>1<p)
            return max(vl[i],query(i*2+1,l+r+2>>1,r,p));
        return max(vl[i],query(i*2,l,l+r>>1,p));
    }
    void upd(int l,int r,int v){
        update(1,1,importpos.size(),importpos.lower_bound(l)->second,
            (--importpos.upper_bound(r))->second,v);
    }
    int qry(int p) {
        return query(1,1,importpos.size(),importpos[p]);
    }
    void reroll(int k){
        while(stk.size()>k){
            auto[a,b]=stk.top();
            stk.pop();
            vl[a]=b;
        }
    }
} seg1,seg2;
vector<pair<int,int>>todie[1<<20],qrys[300100];
void a_range(int l,int r){
    seg1.upd(l,l+r>>1,-l);
    seg2.upd(l+r+2>>1,r,r);
}
map<int,vector<pair<int,int>>>qr;
map<int,int>compr;
void splatonto(int i,int l,int r,int ll,int rr,pair<int,int>vl){
    if(ll<=l&&r<=rr)
        return todie[i].push_back(vl);
    if(ll>r||l>rr) return;
    splatonto(i*2,l,l+r>>1,ll,rr,vl);
    splatonto(i*2+1,l+r+2>>1,r,ll,rr,vl);
}
int depth=0;
void solve(int i,int ll,int rr){
    if(ll>rr)return;
    int sz1=seg1.stk.size(),sz2=seg2.stk.size();
    for(auto[p,t]:todie[i]) {
        stor[t].erase(stor[t].find(p));
        if(stor[t].find(p)==stor[t].end())
            a_range(*--stor[t].lower_bound(p),*stor[t].lower_bound(p));
    }
    if(ll==rr){
        for(auto[p,i]:qrys[ll])
            ans[i]=max(seg1.qry(p)+p,seg2.qry(p)-p);
    } else {
        solve(i*2,ll,ll+rr>>1);
        solve(i*2+1,ll+rr+2>>1,rr);
    }
    for(auto[p,t]:todie[i])
        stor[t].insert(p);
    seg1.reroll(sz1),seg2.reroll(sz2);
}
vector<array<int,4>> stores;
signed main(){
    cin.tie(0)->sync_with_stdio(0);
    importpos[-1e18]=0;
    int n,k,q;
    cin>>n>>k>>q;
    for(int i=0;i<n;i++){
        int l,r,a,b;
        cin>>a>>b>>l>>r;
        stor[b].insert(a);
        stores.push_back({a,b,l,r});
    }
    for(int i=1;i<=k;i++)
        stor[i].insert(-1e18),stor[i].insert(1e18);
    for(int i=0;i<q;i++){
        int x,y; cin>>x>>y;
        qr[y].push_back({x,i});
        compr[y];
        importpos[x];
    }
    int CDCC=0,CDC=0;
    for(auto&[i,j]:importpos)
        j=++CDC;
    importpos[1e18]=CDC+1;
    for(auto&[i,j]:compr)
        j=++CDCC;
    for(auto[k,x]:qr){
        int ind=compr[k];
        for(auto[p,i]:x)
            qrys[ind].push_back({p,i});
    }
    compr[-1e18]=0;
    compr[1e18]=CDCC+1;
    for(auto[pos,t,l,r]:stores){
        int k=(--compr.lower_bound(l))->second;
        splatonto(1,1,CDCC,1,k,{pos,t});
        k=compr.upper_bound(r)->second;
        splatonto(1,1,CDCC,k,CDCC,{pos,t});
    }
    for(int i=1;i<=k;i++){
        auto it=++stor[i].begin();
        while(it!=stor[i].end()){
            a_range(*prev(it),*it);
            it++;
        }
    }
    solve(1,1,CDCC);
    for(int i=0;i<q;i++)
        cout<<(ans[i]>1e9?-1:ans[i])<<'\n';
}

Compilation message

new_home.cpp: In member function 'void segtree::update(long long int, long long int, long long int, long long int, long long int, long long int)':
new_home.cpp:14:23: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   14 |         update(i*2,l,l+r>>1,ll,rr,v);
      |                      ~^~
new_home.cpp:15:25: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   15 |         update(i*2+1,l+r+2>>1,r,ll,rr,v);
      |                      ~~~^~
new_home.cpp: In member function 'long long int segtree::query(long long int, long long int, long long int, long long int)':
new_home.cpp:19:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   19 |         if(l+r>>1<p)
      |            ~^~
new_home.cpp:20:45: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   20 |             return max(vl[i],query(i*2+1,l+r+2>>1,r,p));
      |                                          ~~~^~
new_home.cpp:21:39: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   21 |         return max(vl[i],query(i*2,l,l+r>>1,p));
      |                                      ~^~
new_home.cpp: In member function 'void segtree::reroll(long long int)':
new_home.cpp:31:25: warning: comparison of integer expressions of different signedness: 'std::stack<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   31 |         while(stk.size()>k){
      |               ~~~~~~~~~~^~
new_home.cpp: In function 'void a_range(long long int, long long int)':
new_home.cpp:40:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   40 |     seg1.upd(l,l+r>>1,-l);
      |                ~^~
new_home.cpp:41:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   41 |     seg2.upd(l+r+2>>1,r,r);
      |              ~~~^~
new_home.cpp: In function 'void splatonto(long long int, long long int, long long int, long long int, long long int, std::pair<long long int, long long int>)':
new_home.cpp:49:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   49 |     splatonto(i*2,l,l+r>>1,ll,rr,vl);
      |                     ~^~
new_home.cpp:50:24: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   50 |     splatonto(i*2+1,l+r+2>>1,r,ll,rr,vl);
      |                     ~~~^~
new_home.cpp: In function 'void solve(long long int, long long int, long long int)':
new_home.cpp:65:24: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   65 |         solve(i*2,ll,ll+rr>>1);
      |                      ~~^~~
new_home.cpp:66:26: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   66 |         solve(i*2+1,ll+rr+2>>1,rr);
      |                     ~~~~~^~
# Verdict Execution time Memory Grader output
1 Correct 18 ms 64128 KB Output is correct
2 Correct 15 ms 64088 KB Output is correct
3 Correct 15 ms 64088 KB Output is correct
4 Correct 16 ms 64092 KB Output is correct
5 Correct 15 ms 64092 KB Output is correct
6 Correct 17 ms 64344 KB Output is correct
7 Correct 17 ms 64600 KB Output is correct
8 Correct 20 ms 64620 KB Output is correct
9 Correct 17 ms 64680 KB Output is correct
10 Correct 21 ms 64532 KB Output is correct
11 Correct 22 ms 64344 KB Output is correct
12 Correct 17 ms 64348 KB Output is correct
13 Correct 17 ms 64348 KB Output is correct
14 Correct 17 ms 64348 KB Output is correct
15 Correct 17 ms 64596 KB Output is correct
16 Correct 18 ms 64604 KB Output is correct
17 Correct 17 ms 64468 KB Output is correct
18 Correct 17 ms 64604 KB Output is correct
19 Correct 17 ms 64444 KB Output is correct
20 Correct 18 ms 64344 KB Output is correct
21 Correct 15 ms 64092 KB Output is correct
22 Correct 17 ms 64468 KB Output is correct
23 Correct 17 ms 64472 KB Output is correct
24 Correct 17 ms 64600 KB Output is correct
25 Correct 17 ms 64408 KB Output is correct
26 Correct 21 ms 64344 KB Output is correct
27 Correct 16 ms 64348 KB Output is correct
28 Correct 17 ms 64348 KB Output is correct
29 Correct 17 ms 64464 KB Output is correct
30 Correct 17 ms 64344 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 18 ms 64128 KB Output is correct
2 Correct 15 ms 64088 KB Output is correct
3 Correct 15 ms 64088 KB Output is correct
4 Correct 16 ms 64092 KB Output is correct
5 Correct 15 ms 64092 KB Output is correct
6 Correct 17 ms 64344 KB Output is correct
7 Correct 17 ms 64600 KB Output is correct
8 Correct 20 ms 64620 KB Output is correct
9 Correct 17 ms 64680 KB Output is correct
10 Correct 21 ms 64532 KB Output is correct
11 Correct 22 ms 64344 KB Output is correct
12 Correct 17 ms 64348 KB Output is correct
13 Correct 17 ms 64348 KB Output is correct
14 Correct 17 ms 64348 KB Output is correct
15 Correct 17 ms 64596 KB Output is correct
16 Correct 18 ms 64604 KB Output is correct
17 Correct 17 ms 64468 KB Output is correct
18 Correct 17 ms 64604 KB Output is correct
19 Correct 17 ms 64444 KB Output is correct
20 Correct 18 ms 64344 KB Output is correct
21 Correct 15 ms 64092 KB Output is correct
22 Correct 17 ms 64468 KB Output is correct
23 Correct 17 ms 64472 KB Output is correct
24 Correct 17 ms 64600 KB Output is correct
25 Correct 17 ms 64408 KB Output is correct
26 Correct 21 ms 64344 KB Output is correct
27 Correct 16 ms 64348 KB Output is correct
28 Correct 17 ms 64348 KB Output is correct
29 Correct 17 ms 64464 KB Output is correct
30 Correct 17 ms 64344 KB Output is correct
31 Correct 1792 ms 133072 KB Output is correct
32 Correct 110 ms 75452 KB Output is correct
33 Correct 1621 ms 114120 KB Output is correct
34 Correct 1671 ms 133780 KB Output is correct
35 Correct 1765 ms 127220 KB Output is correct
36 Correct 1616 ms 113760 KB Output is correct
37 Correct 1184 ms 118208 KB Output is correct
38 Correct 1139 ms 109636 KB Output is correct
39 Correct 866 ms 111684 KB Output is correct
40 Correct 927 ms 109484 KB Output is correct
41 Correct 1405 ms 131516 KB Output is correct
42 Correct 1393 ms 131984 KB Output is correct
43 Correct 46 ms 73156 KB Output is correct
44 Correct 1387 ms 130200 KB Output is correct
45 Correct 1441 ms 123584 KB Output is correct
46 Correct 1468 ms 112636 KB Output is correct
47 Correct 695 ms 116420 KB Output is correct
48 Correct 678 ms 112268 KB Output is correct
49 Correct 841 ms 117268 KB Output is correct
50 Correct 942 ms 131832 KB Output is correct
51 Correct 884 ms 113092 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2066 ms 329488 KB Output is correct
2 Correct 1645 ms 202228 KB Output is correct
3 Correct 1997 ms 464788 KB Output is correct
4 Correct 2015 ms 365388 KB Output is correct
5 Correct 1400 ms 185704 KB Output is correct
6 Correct 1510 ms 195476 KB Output is correct
7 Correct 1879 ms 464896 KB Output is correct
8 Correct 1868 ms 366744 KB Output is correct
9 Correct 1784 ms 322296 KB Output is correct
10 Correct 1660 ms 245912 KB Output is correct
11 Correct 1028 ms 208596 KB Output is correct
12 Correct 1169 ms 239792 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 5046 ms 400104 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 18 ms 64128 KB Output is correct
2 Correct 15 ms 64088 KB Output is correct
3 Correct 15 ms 64088 KB Output is correct
4 Correct 16 ms 64092 KB Output is correct
5 Correct 15 ms 64092 KB Output is correct
6 Correct 17 ms 64344 KB Output is correct
7 Correct 17 ms 64600 KB Output is correct
8 Correct 20 ms 64620 KB Output is correct
9 Correct 17 ms 64680 KB Output is correct
10 Correct 21 ms 64532 KB Output is correct
11 Correct 22 ms 64344 KB Output is correct
12 Correct 17 ms 64348 KB Output is correct
13 Correct 17 ms 64348 KB Output is correct
14 Correct 17 ms 64348 KB Output is correct
15 Correct 17 ms 64596 KB Output is correct
16 Correct 18 ms 64604 KB Output is correct
17 Correct 17 ms 64468 KB Output is correct
18 Correct 17 ms 64604 KB Output is correct
19 Correct 17 ms 64444 KB Output is correct
20 Correct 18 ms 64344 KB Output is correct
21 Correct 15 ms 64092 KB Output is correct
22 Correct 17 ms 64468 KB Output is correct
23 Correct 17 ms 64472 KB Output is correct
24 Correct 17 ms 64600 KB Output is correct
25 Correct 17 ms 64408 KB Output is correct
26 Correct 21 ms 64344 KB Output is correct
27 Correct 16 ms 64348 KB Output is correct
28 Correct 17 ms 64348 KB Output is correct
29 Correct 17 ms 64464 KB Output is correct
30 Correct 17 ms 64344 KB Output is correct
31 Correct 1792 ms 133072 KB Output is correct
32 Correct 110 ms 75452 KB Output is correct
33 Correct 1621 ms 114120 KB Output is correct
34 Correct 1671 ms 133780 KB Output is correct
35 Correct 1765 ms 127220 KB Output is correct
36 Correct 1616 ms 113760 KB Output is correct
37 Correct 1184 ms 118208 KB Output is correct
38 Correct 1139 ms 109636 KB Output is correct
39 Correct 866 ms 111684 KB Output is correct
40 Correct 927 ms 109484 KB Output is correct
41 Correct 1405 ms 131516 KB Output is correct
42 Correct 1393 ms 131984 KB Output is correct
43 Correct 46 ms 73156 KB Output is correct
44 Correct 1387 ms 130200 KB Output is correct
45 Correct 1441 ms 123584 KB Output is correct
46 Correct 1468 ms 112636 KB Output is correct
47 Correct 695 ms 116420 KB Output is correct
48 Correct 678 ms 112268 KB Output is correct
49 Correct 841 ms 117268 KB Output is correct
50 Correct 942 ms 131832 KB Output is correct
51 Correct 884 ms 113092 KB Output is correct
52 Correct 694 ms 165400 KB Output is correct
53 Correct 693 ms 165820 KB Output is correct
54 Correct 1043 ms 151928 KB Output is correct
55 Correct 964 ms 142640 KB Output is correct
56 Correct 837 ms 145600 KB Output is correct
57 Correct 1237 ms 134528 KB Output is correct
58 Correct 1022 ms 145372 KB Output is correct
59 Correct 910 ms 149952 KB Output is correct
60 Correct 1167 ms 136364 KB Output is correct
61 Correct 46 ms 79808 KB Output is correct
62 Correct 612 ms 165312 KB Output is correct
63 Correct 857 ms 155848 KB Output is correct
64 Correct 956 ms 153080 KB Output is correct
65 Correct 1188 ms 148824 KB Output is correct
66 Correct 1356 ms 136312 KB Output is correct
67 Correct 143 ms 85532 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 18 ms 64128 KB Output is correct
2 Correct 15 ms 64088 KB Output is correct
3 Correct 15 ms 64088 KB Output is correct
4 Correct 16 ms 64092 KB Output is correct
5 Correct 15 ms 64092 KB Output is correct
6 Correct 17 ms 64344 KB Output is correct
7 Correct 17 ms 64600 KB Output is correct
8 Correct 20 ms 64620 KB Output is correct
9 Correct 17 ms 64680 KB Output is correct
10 Correct 21 ms 64532 KB Output is correct
11 Correct 22 ms 64344 KB Output is correct
12 Correct 17 ms 64348 KB Output is correct
13 Correct 17 ms 64348 KB Output is correct
14 Correct 17 ms 64348 KB Output is correct
15 Correct 17 ms 64596 KB Output is correct
16 Correct 18 ms 64604 KB Output is correct
17 Correct 17 ms 64468 KB Output is correct
18 Correct 17 ms 64604 KB Output is correct
19 Correct 17 ms 64444 KB Output is correct
20 Correct 18 ms 64344 KB Output is correct
21 Correct 15 ms 64092 KB Output is correct
22 Correct 17 ms 64468 KB Output is correct
23 Correct 17 ms 64472 KB Output is correct
24 Correct 17 ms 64600 KB Output is correct
25 Correct 17 ms 64408 KB Output is correct
26 Correct 21 ms 64344 KB Output is correct
27 Correct 16 ms 64348 KB Output is correct
28 Correct 17 ms 64348 KB Output is correct
29 Correct 17 ms 64464 KB Output is correct
30 Correct 17 ms 64344 KB Output is correct
31 Correct 1792 ms 133072 KB Output is correct
32 Correct 110 ms 75452 KB Output is correct
33 Correct 1621 ms 114120 KB Output is correct
34 Correct 1671 ms 133780 KB Output is correct
35 Correct 1765 ms 127220 KB Output is correct
36 Correct 1616 ms 113760 KB Output is correct
37 Correct 1184 ms 118208 KB Output is correct
38 Correct 1139 ms 109636 KB Output is correct
39 Correct 866 ms 111684 KB Output is correct
40 Correct 927 ms 109484 KB Output is correct
41 Correct 1405 ms 131516 KB Output is correct
42 Correct 1393 ms 131984 KB Output is correct
43 Correct 46 ms 73156 KB Output is correct
44 Correct 1387 ms 130200 KB Output is correct
45 Correct 1441 ms 123584 KB Output is correct
46 Correct 1468 ms 112636 KB Output is correct
47 Correct 695 ms 116420 KB Output is correct
48 Correct 678 ms 112268 KB Output is correct
49 Correct 841 ms 117268 KB Output is correct
50 Correct 942 ms 131832 KB Output is correct
51 Correct 884 ms 113092 KB Output is correct
52 Correct 2066 ms 329488 KB Output is correct
53 Correct 1645 ms 202228 KB Output is correct
54 Correct 1997 ms 464788 KB Output is correct
55 Correct 2015 ms 365388 KB Output is correct
56 Correct 1400 ms 185704 KB Output is correct
57 Correct 1510 ms 195476 KB Output is correct
58 Correct 1879 ms 464896 KB Output is correct
59 Correct 1868 ms 366744 KB Output is correct
60 Correct 1784 ms 322296 KB Output is correct
61 Correct 1660 ms 245912 KB Output is correct
62 Correct 1028 ms 208596 KB Output is correct
63 Correct 1169 ms 239792 KB Output is correct
64 Execution timed out 5046 ms 400104 KB Time limit exceeded
65 Halted 0 ms 0 KB -