답안 #1046862

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1046862 2024-08-07T05:14:26 Z 변재우(#11026) 청소 (JOI20_sweeping) C++17
0 / 100
71 ms 35300 KB
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int Nmax=1500010, S=(1<<21);
int N, M, Q, X[Nmax], Y[Nmax];
class Seg {
public:
    void Update(int l, int r, int v) {Update(1, 1, S, l, r, v);}
    int Query(int k) {return Query(1, 1, S, k);}
private:
    int Tree[2*S], Lazy[2*S];
    void Propagate(int node, int s, int e) {
        Tree[node]=max(Tree[node], Lazy[node]);
        if(s!=e) Lazy[node<<1]=max(Lazy[node<<1], Lazy[node]), Lazy[node<<1|1]=max(Lazy[node<<1|1], Lazy[node]);
        return;
    }
    void Update(int node, int s, int e, int l, int r, int v) {
        Propagate(node, s, e);
        if(s>r || l>e) return;
        if(l<=s && e<=r) {
            Lazy[node]=v;
            Propagate(node, s, e);
            return;
        }
        int lch=2*node, rch=lch+1, m=(s+e)/2;
        Update(lch, s, m, l, r, v), Update(rch, m+1, e, l, r, v);
        Tree[node]=max(Tree[lch], Tree[rch]);
    }
    int Query(int node, int s, int e, int k) {
        Propagate(node, s, e);
        if(s==e) return Tree[node];
        int lch=2*node, rch=lch+1, m=(s+e)/2;
        if(k<=m) return Query(lch, s, m, k);
        else return Query(rch, m+1, e, k);
    }
}Tx, Ty;

signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin>>N>>M>>Q;
    for(int i=1; i<=M; i++) cin>>X[i]>>Y[i];
    for(int i=1; i<=Q; i++) {
        int op; cin>>op;
        if(op==1)  {
            int k; cin>>k;
            cout<<max(X[k], Tx.Query(k))<<" "<<max(Y[k], Ty.Query(k))<<"\n";
        }
        else if(op==2) {
            int l, p=N+1; cin>>l;
            for(int s=1, e=N; s<=e; ) {
                int m=(s+e)/2;
                if(max(Y[m], Ty.Query(m))<=l) p=m, e=m-1;
                else s=m+1;
            }
            Tx.Update(p, N, N-l);
        }
        else {
            int l, p=0; cin>>l;
            for(int s=1, e=N; s<=e; ) {
                int m=(s+e)/2;
                if(max(X[m], Tx.Query(m))<=l) p=m, s=m+1;
                else e=m-1;
            }
            Ty.Update(1, p, N-l);
        }
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 5 ms 9052 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 71 ms 35172 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 64 ms 35300 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 64 ms 35300 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 5 ms 9052 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -