답안 #660092

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
660092 2022-11-20T10:46:42 Z Karuk Event Hopping (BOI22_events) C++14
25 / 100
1500 ms 195052 KB
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
pair<long long,long long>max(pair<long long,long long>a,pair<long long,long long>b) {
    return a>b?a:b;
}
const long long k=(1<<30);
map<long long,pair<long long,long long> >maxv;
void upd(long long x,long long va,long long ind) {
    pair<long long,long long>val={va,ind};
    while(x>0) {
        maxv[x]=max(maxv[x],val);
        x>>=1;
    }
}
pair<long long,long long> ask(long long from,long long to,long long cur=1,long long beg=0,long long en=k-1) {
    if(from<=beg && en<=to)return maxv[cur];
    if(to<beg || en<from)return {-1,-1};
    long long mid=(beg+en)/2;
    return max(ask(from,to,cur*2,beg,mid),ask(from,to,cur*2+1,mid+1,en));
}
int main() {
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    long long n,q;cin>>n>>q;
    pair<long long,long long>a[n];
    for(long long i=0;i<n;i++) {
        long long x,y;
        cin>>x>>y;
        a[i]={x,y};
        upd(y+k,k-x,i);
    }
    pair<long long,long long> prev[n][25];
    for(long long i=0;i<n;i++) {
        pair<long long,long long>d=ask(a[i].first,a[i].second);
        d.first=k-d.first;
        prev[i][0]=d;
    }
    for(long long j=1;j<25;j++) {
        for(long long i=0;i<n;i++) {
            prev[i][j]=prev[prev[i][j-1].second][j-1];
        }
    }
    for(long long i=0;i<q;i++) {
        long long x,y;cin>>x>>y;x--;y--;
        if(x==y)cout<<0<<endl;
        else if(a[x].second>=a[y].first && a[x].second<=a[y].second)cout<<1<<endl;
        else if(a[x].second>a[y].second){cout<<"impossible"<<endl;}
        else {
            long long cnt=0;
            long long cur=y;
            long long en=a[x].second;
            for(long long j=24;j>=0;j--) {
                if(prev[cur][j].first>en) {
                    cur=prev[cur][j].second;
                    cnt+=(1<<j);
                }
            }
            if(prev[cur][0].first>en)cout<<"impossible"<<endl;
            else cout<<cnt+2<<endl;
        }
    }
    return 0;
}
///9:30
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1496 ms 185740 KB Output is correct
3 Correct 1496 ms 191528 KB Output is correct
4 Execution timed out 1582 ms 195052 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 10 ms 2864 KB Output is correct
4 Correct 9 ms 3008 KB Output is correct
5 Correct 3 ms 852 KB Output is correct
6 Correct 7 ms 1876 KB Output is correct
7 Correct 12 ms 3168 KB Output is correct
8 Correct 11 ms 3096 KB Output is correct
9 Correct 3 ms 724 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 10 ms 2864 KB Output is correct
4 Correct 9 ms 3008 KB Output is correct
5 Correct 3 ms 852 KB Output is correct
6 Correct 7 ms 1876 KB Output is correct
7 Correct 12 ms 3168 KB Output is correct
8 Correct 11 ms 3096 KB Output is correct
9 Correct 3 ms 724 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 10 ms 2900 KB Output is correct
13 Correct 10 ms 2912 KB Output is correct
14 Correct 4 ms 852 KB Output is correct
15 Correct 8 ms 1876 KB Output is correct
16 Correct 11 ms 3156 KB Output is correct
17 Correct 11 ms 3028 KB Output is correct
18 Correct 3 ms 724 KB Output is correct
19 Correct 53 ms 3516 KB Output is correct
20 Correct 99 ms 12364 KB Output is correct
21 Correct 52 ms 3732 KB Output is correct
22 Correct 68 ms 8376 KB Output is correct
23 Correct 92 ms 13660 KB Output is correct
24 Correct 93 ms 13364 KB Output is correct
25 Correct 90 ms 13556 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 10 ms 2864 KB Output is correct
4 Correct 9 ms 3008 KB Output is correct
5 Correct 3 ms 852 KB Output is correct
6 Correct 7 ms 1876 KB Output is correct
7 Correct 12 ms 3168 KB Output is correct
8 Correct 11 ms 3096 KB Output is correct
9 Correct 3 ms 724 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 10 ms 2844 KB Output is correct
13 Correct 12 ms 2900 KB Output is correct
14 Correct 3 ms 852 KB Output is correct
15 Correct 7 ms 1916 KB Output is correct
16 Correct 12 ms 3156 KB Output is correct
17 Correct 11 ms 3036 KB Output is correct
18 Correct 3 ms 724 KB Output is correct
19 Correct 1459 ms 186916 KB Output is correct
20 Correct 552 ms 53624 KB Output is correct
21 Correct 1425 ms 118228 KB Output is correct
22 Correct 1391 ms 170412 KB Output is correct
23 Execution timed out 1593 ms 178472 KB Time limit exceeded
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1574 ms 185744 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1496 ms 185740 KB Output is correct
3 Correct 1496 ms 191528 KB Output is correct
4 Execution timed out 1582 ms 195052 KB Time limit exceeded
5 Halted 0 ms 0 KB -