답안 #1028534

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1028534 2024-07-20T03:54:41 Z vjudge1 새 집 (APIO18_new_home) C++17
57 / 100
5000 ms 301612 KB
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(3)
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=-1e9;}
    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;
int main(){
    cin.tie(0)->sync_with_stdio(0);
    importpos[-1e9]=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(-1e9),stor[i].insert(1e9);
    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[1e9]=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[-1e9]=0;
    compr[1e9]=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]>1e8?-1:ans[i])<<'\n';
}

Compilation message

new_home.cpp: In member function 'void segtree::update(int, int, int, int, int, 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 'int segtree::query(int, int, int, 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(int)':
new_home.cpp:31:25: warning: comparison of integer expressions of different signedness: 'std::stack<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   31 |         while(stk.size()>k){
      |               ~~~~~~~~~~^~
new_home.cpp: In function 'void a_range(int, 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(int, int, int, int, int, std::pair<int, 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(int, int, 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);
      |                     ~~~~~^~
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 54360 KB Output is correct
2 Correct 28 ms 54364 KB Output is correct
3 Correct 28 ms 54364 KB Output is correct
4 Correct 20 ms 54364 KB Output is correct
5 Correct 23 ms 54356 KB Output is correct
6 Correct 24 ms 54620 KB Output is correct
7 Correct 21 ms 54620 KB Output is correct
8 Correct 22 ms 54616 KB Output is correct
9 Correct 21 ms 54616 KB Output is correct
10 Correct 28 ms 54620 KB Output is correct
11 Correct 22 ms 54620 KB Output is correct
12 Correct 32 ms 54568 KB Output is correct
13 Correct 15 ms 54620 KB Output is correct
14 Correct 12 ms 54640 KB Output is correct
15 Correct 13 ms 54492 KB Output is correct
16 Correct 13 ms 54620 KB Output is correct
17 Correct 14 ms 54672 KB Output is correct
18 Correct 16 ms 54708 KB Output is correct
19 Correct 20 ms 54620 KB Output is correct
20 Correct 13 ms 54620 KB Output is correct
21 Correct 13 ms 54364 KB Output is correct
22 Correct 12 ms 54720 KB Output is correct
23 Correct 14 ms 54620 KB Output is correct
24 Correct 13 ms 54620 KB Output is correct
25 Correct 18 ms 54620 KB Output is correct
26 Correct 19 ms 54620 KB Output is correct
27 Correct 16 ms 54364 KB Output is correct
28 Correct 19 ms 54652 KB Output is correct
29 Correct 19 ms 54620 KB Output is correct
30 Correct 18 ms 54616 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 54360 KB Output is correct
2 Correct 28 ms 54364 KB Output is correct
3 Correct 28 ms 54364 KB Output is correct
4 Correct 20 ms 54364 KB Output is correct
5 Correct 23 ms 54356 KB Output is correct
6 Correct 24 ms 54620 KB Output is correct
7 Correct 21 ms 54620 KB Output is correct
8 Correct 22 ms 54616 KB Output is correct
9 Correct 21 ms 54616 KB Output is correct
10 Correct 28 ms 54620 KB Output is correct
11 Correct 22 ms 54620 KB Output is correct
12 Correct 32 ms 54568 KB Output is correct
13 Correct 15 ms 54620 KB Output is correct
14 Correct 12 ms 54640 KB Output is correct
15 Correct 13 ms 54492 KB Output is correct
16 Correct 13 ms 54620 KB Output is correct
17 Correct 14 ms 54672 KB Output is correct
18 Correct 16 ms 54708 KB Output is correct
19 Correct 20 ms 54620 KB Output is correct
20 Correct 13 ms 54620 KB Output is correct
21 Correct 13 ms 54364 KB Output is correct
22 Correct 12 ms 54720 KB Output is correct
23 Correct 14 ms 54620 KB Output is correct
24 Correct 13 ms 54620 KB Output is correct
25 Correct 18 ms 54620 KB Output is correct
26 Correct 19 ms 54620 KB Output is correct
27 Correct 16 ms 54364 KB Output is correct
28 Correct 19 ms 54652 KB Output is correct
29 Correct 19 ms 54620 KB Output is correct
30 Correct 18 ms 54616 KB Output is correct
31 Correct 1638 ms 96452 KB Output is correct
32 Correct 105 ms 61640 KB Output is correct
33 Correct 1541 ms 87492 KB Output is correct
34 Correct 1503 ms 96936 KB Output is correct
35 Correct 1487 ms 93356 KB Output is correct
36 Correct 1420 ms 87128 KB Output is correct
37 Correct 1141 ms 88772 KB Output is correct
38 Correct 1124 ms 85576 KB Output is correct
39 Correct 826 ms 86672 KB Output is correct
40 Correct 825 ms 85696 KB Output is correct
41 Correct 1297 ms 95680 KB Output is correct
42 Correct 1278 ms 96048 KB Output is correct
43 Correct 40 ms 60784 KB Output is correct
44 Correct 1312 ms 95032 KB Output is correct
45 Correct 1367 ms 91672 KB Output is correct
46 Correct 1294 ms 86728 KB Output is correct
47 Correct 637 ms 87828 KB Output is correct
48 Correct 664 ms 86212 KB Output is correct
49 Correct 752 ms 88260 KB Output is correct
50 Correct 874 ms 95940 KB Output is correct
51 Correct 862 ms 86984 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1912 ms 229432 KB Output is correct
2 Correct 1572 ms 156076 KB Output is correct
3 Correct 1754 ms 301612 KB Output is correct
4 Correct 1875 ms 242520 KB Output is correct
5 Correct 1402 ms 147840 KB Output is correct
6 Correct 1496 ms 152956 KB Output is correct
7 Correct 1759 ms 301512 KB Output is correct
8 Correct 1738 ms 243308 KB Output is correct
9 Correct 1849 ms 217644 KB Output is correct
10 Correct 1685 ms 178080 KB Output is correct
11 Correct 1114 ms 159660 KB Output is correct
12 Correct 1247 ms 175036 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5047 ms 263660 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 54360 KB Output is correct
2 Correct 28 ms 54364 KB Output is correct
3 Correct 28 ms 54364 KB Output is correct
4 Correct 20 ms 54364 KB Output is correct
5 Correct 23 ms 54356 KB Output is correct
6 Correct 24 ms 54620 KB Output is correct
7 Correct 21 ms 54620 KB Output is correct
8 Correct 22 ms 54616 KB Output is correct
9 Correct 21 ms 54616 KB Output is correct
10 Correct 28 ms 54620 KB Output is correct
11 Correct 22 ms 54620 KB Output is correct
12 Correct 32 ms 54568 KB Output is correct
13 Correct 15 ms 54620 KB Output is correct
14 Correct 12 ms 54640 KB Output is correct
15 Correct 13 ms 54492 KB Output is correct
16 Correct 13 ms 54620 KB Output is correct
17 Correct 14 ms 54672 KB Output is correct
18 Correct 16 ms 54708 KB Output is correct
19 Correct 20 ms 54620 KB Output is correct
20 Correct 13 ms 54620 KB Output is correct
21 Correct 13 ms 54364 KB Output is correct
22 Correct 12 ms 54720 KB Output is correct
23 Correct 14 ms 54620 KB Output is correct
24 Correct 13 ms 54620 KB Output is correct
25 Correct 18 ms 54620 KB Output is correct
26 Correct 19 ms 54620 KB Output is correct
27 Correct 16 ms 54364 KB Output is correct
28 Correct 19 ms 54652 KB Output is correct
29 Correct 19 ms 54620 KB Output is correct
30 Correct 18 ms 54616 KB Output is correct
31 Correct 1638 ms 96452 KB Output is correct
32 Correct 105 ms 61640 KB Output is correct
33 Correct 1541 ms 87492 KB Output is correct
34 Correct 1503 ms 96936 KB Output is correct
35 Correct 1487 ms 93356 KB Output is correct
36 Correct 1420 ms 87128 KB Output is correct
37 Correct 1141 ms 88772 KB Output is correct
38 Correct 1124 ms 85576 KB Output is correct
39 Correct 826 ms 86672 KB Output is correct
40 Correct 825 ms 85696 KB Output is correct
41 Correct 1297 ms 95680 KB Output is correct
42 Correct 1278 ms 96048 KB Output is correct
43 Correct 40 ms 60784 KB Output is correct
44 Correct 1312 ms 95032 KB Output is correct
45 Correct 1367 ms 91672 KB Output is correct
46 Correct 1294 ms 86728 KB Output is correct
47 Correct 637 ms 87828 KB Output is correct
48 Correct 664 ms 86212 KB Output is correct
49 Correct 752 ms 88260 KB Output is correct
50 Correct 874 ms 95940 KB Output is correct
51 Correct 862 ms 86984 KB Output is correct
52 Correct 696 ms 115136 KB Output is correct
53 Correct 681 ms 115872 KB Output is correct
54 Correct 1087 ms 106440 KB Output is correct
55 Correct 1027 ms 101680 KB Output is correct
56 Correct 821 ms 103856 KB Output is correct
57 Correct 1232 ms 97352 KB Output is correct
58 Correct 1151 ms 103364 KB Output is correct
59 Correct 959 ms 106272 KB Output is correct
60 Correct 1220 ms 98312 KB Output is correct
61 Correct 44 ms 67016 KB Output is correct
62 Correct 652 ms 114920 KB Output is correct
63 Correct 937 ms 109356 KB Output is correct
64 Correct 980 ms 107204 KB Output is correct
65 Correct 1158 ms 105160 KB Output is correct
66 Correct 1215 ms 98248 KB Output is correct
67 Correct 134 ms 67268 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 54360 KB Output is correct
2 Correct 28 ms 54364 KB Output is correct
3 Correct 28 ms 54364 KB Output is correct
4 Correct 20 ms 54364 KB Output is correct
5 Correct 23 ms 54356 KB Output is correct
6 Correct 24 ms 54620 KB Output is correct
7 Correct 21 ms 54620 KB Output is correct
8 Correct 22 ms 54616 KB Output is correct
9 Correct 21 ms 54616 KB Output is correct
10 Correct 28 ms 54620 KB Output is correct
11 Correct 22 ms 54620 KB Output is correct
12 Correct 32 ms 54568 KB Output is correct
13 Correct 15 ms 54620 KB Output is correct
14 Correct 12 ms 54640 KB Output is correct
15 Correct 13 ms 54492 KB Output is correct
16 Correct 13 ms 54620 KB Output is correct
17 Correct 14 ms 54672 KB Output is correct
18 Correct 16 ms 54708 KB Output is correct
19 Correct 20 ms 54620 KB Output is correct
20 Correct 13 ms 54620 KB Output is correct
21 Correct 13 ms 54364 KB Output is correct
22 Correct 12 ms 54720 KB Output is correct
23 Correct 14 ms 54620 KB Output is correct
24 Correct 13 ms 54620 KB Output is correct
25 Correct 18 ms 54620 KB Output is correct
26 Correct 19 ms 54620 KB Output is correct
27 Correct 16 ms 54364 KB Output is correct
28 Correct 19 ms 54652 KB Output is correct
29 Correct 19 ms 54620 KB Output is correct
30 Correct 18 ms 54616 KB Output is correct
31 Correct 1638 ms 96452 KB Output is correct
32 Correct 105 ms 61640 KB Output is correct
33 Correct 1541 ms 87492 KB Output is correct
34 Correct 1503 ms 96936 KB Output is correct
35 Correct 1487 ms 93356 KB Output is correct
36 Correct 1420 ms 87128 KB Output is correct
37 Correct 1141 ms 88772 KB Output is correct
38 Correct 1124 ms 85576 KB Output is correct
39 Correct 826 ms 86672 KB Output is correct
40 Correct 825 ms 85696 KB Output is correct
41 Correct 1297 ms 95680 KB Output is correct
42 Correct 1278 ms 96048 KB Output is correct
43 Correct 40 ms 60784 KB Output is correct
44 Correct 1312 ms 95032 KB Output is correct
45 Correct 1367 ms 91672 KB Output is correct
46 Correct 1294 ms 86728 KB Output is correct
47 Correct 637 ms 87828 KB Output is correct
48 Correct 664 ms 86212 KB Output is correct
49 Correct 752 ms 88260 KB Output is correct
50 Correct 874 ms 95940 KB Output is correct
51 Correct 862 ms 86984 KB Output is correct
52 Correct 1912 ms 229432 KB Output is correct
53 Correct 1572 ms 156076 KB Output is correct
54 Correct 1754 ms 301612 KB Output is correct
55 Correct 1875 ms 242520 KB Output is correct
56 Correct 1402 ms 147840 KB Output is correct
57 Correct 1496 ms 152956 KB Output is correct
58 Correct 1759 ms 301512 KB Output is correct
59 Correct 1738 ms 243308 KB Output is correct
60 Correct 1849 ms 217644 KB Output is correct
61 Correct 1685 ms 178080 KB Output is correct
62 Correct 1114 ms 159660 KB Output is correct
63 Correct 1247 ms 175036 KB Output is correct
64 Execution timed out 5047 ms 263660 KB Time limit exceeded
65 Halted 0 ms 0 KB -