답안 #590017

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
590017 2022-07-05T13:11:45 Z Morisz10 Event Hopping 2 (JOI21_event2) C++14
32 / 100
154 ms 21436 KB
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
const int maxn=100001;

struct event{
    ll l, r;
    int id;
    event(){}
    bool operator<(const event& e) const {
        if(l != e.l)return l < e.l;
        return r < e.r;
    }
};

event e[maxn];
int nxt[maxn][18];
bool was[maxn];

int cnt(int i, int j){
    int ans = 0;
    int x=i;
    for(int k = 17; k >= 0; k--){
        if(e[nxt[i][k]].r <= e[j].l){
            i=nxt[i][k];
            ans+=(1<<k);
        }
    }
  //  cout<<'\n'<<x<<' '<<j<<' '<<ans<<'\n';
    return ans;
}

int main(){
    int n, k;
    cin >> n >> k;
    e[0].l=e[0].r=e[0].id=0;
    e[n + 1].l = 1e10;
    e[n + 1].r = 1e10 + 1;
    e[n + 1].id = n + 1;
    vector<pair<ll,int>> he{{0, 0}, {0, 0}};
    for(int i = 1; i <= n; i++){
        cin >> e[i].l >> e[i].r;
        e[i].id = i;
        he.push_back({e[i].l, i + n});
        he.push_back({e[i].r, i});
    }
    sort(he.begin(), he.end());
    for(int i=0;i<=n+1;i++){
        for(int j=0;j<18;j++)
            nxt[i][j] = n + 1;
    }
//    cout<<"a\n";
    int cur = -1;
    for(int i = he.size()-1; i >= 0; i--){
     //   cout<<i<<' '<<he[i].first<<' '<<he[i].second<<' '<<cur<<endl;
        if(he[i].second > n){
            if(cur < 0 || e[he[i].second - n].r< e[cur].r)
                cur = he[i].second - n;
        }
        else if(cur > 0){
            nxt[he[i].second][0]=cur;
            for(int j=1;j<18;j++){
                nxt[he[i].second][j] = nxt[nxt[he[i].second][j - 1]][j - 1];
            }
        }
    }
    vector<int> ans;
    set<event> s;
    int sum = cnt(0, n + 1);
    s.insert(e[0]);
    s.insert(e[n + 1]);
    for(int i = 1;i <= n && ans.size() < k; i++){
        auto R=s.upper_bound(e[i]), L=R;
        L--;
        if(R->l < e[i].r || L->r > e[i].l)continue;
        int x = cnt(L->id, R->id) - cnt(L->id, i) - cnt(i, R->id) - 1;
        if(sum - x < k)continue;
        sum -= x;
        ans.push_back(i);
        s.insert(e[i]);
    }
    if(ans.size() < k){
        cout<<-1;
        return 0;
    }
    for(int i:ans)cout<<i<<'\n';
    cout<<'\n';
}

Compilation message

event2.cpp: In function 'int cnt(int, int)':
event2.cpp:22:9: warning: unused variable 'x' [-Wunused-variable]
   22 |     int x=i;
      |         ^
event2.cpp: In function 'int main()':
event2.cpp:72:40: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   72 |     for(int i = 1;i <= n && ans.size() < k; i++){
      |                             ~~~~~~~~~~~^~~
event2.cpp:82:19: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   82 |     if(ans.size() < k){
      |        ~~~~~~~~~~~^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 304 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 154 ms 21436 KB Output is correct
5 Correct 153 ms 21048 KB Output is correct
6 Correct 153 ms 20760 KB Output is correct
7 Correct 139 ms 20084 KB Output is correct
8 Incorrect 107 ms 14824 KB Output isn't correct
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 304 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 300 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 304 KB Output is correct
11 Correct 1 ms 308 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 312 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 1 ms 212 KB Output is correct
23 Correct 0 ms 308 KB Output is correct
24 Correct 0 ms 212 KB Output is correct
25 Correct 1 ms 212 KB Output is correct
26 Correct 1 ms 212 KB Output is correct
27 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 304 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 300 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 304 KB Output is correct
11 Correct 1 ms 308 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 312 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 1 ms 212 KB Output is correct
23 Correct 0 ms 308 KB Output is correct
24 Correct 0 ms 212 KB Output is correct
25 Correct 1 ms 212 KB Output is correct
26 Correct 1 ms 212 KB Output is correct
27 Correct 1 ms 212 KB Output is correct
28 Correct 4 ms 852 KB Output is correct
29 Correct 4 ms 832 KB Output is correct
30 Correct 4 ms 852 KB Output is correct
31 Correct 3 ms 852 KB Output is correct
32 Correct 4 ms 852 KB Output is correct
33 Correct 4 ms 852 KB Output is correct
34 Correct 5 ms 852 KB Output is correct
35 Correct 5 ms 980 KB Output is correct
36 Correct 6 ms 956 KB Output is correct
37 Correct 5 ms 832 KB Output is correct
38 Correct 4 ms 852 KB Output is correct
39 Correct 5 ms 852 KB Output is correct
40 Correct 5 ms 852 KB Output is correct
41 Correct 4 ms 852 KB Output is correct
42 Correct 4 ms 852 KB Output is correct
43 Correct 5 ms 852 KB Output is correct
44 Correct 4 ms 852 KB Output is correct
45 Correct 4 ms 828 KB Output is correct
46 Correct 5 ms 852 KB Output is correct
47 Correct 4 ms 832 KB Output is correct
48 Correct 4 ms 852 KB Output is correct
49 Correct 4 ms 852 KB Output is correct
50 Correct 4 ms 852 KB Output is correct
51 Correct 4 ms 852 KB Output is correct
52 Correct 4 ms 852 KB Output is correct
53 Correct 4 ms 852 KB Output is correct
54 Correct 4 ms 852 KB Output is correct
55 Correct 5 ms 960 KB Output is correct
56 Correct 5 ms 980 KB Output is correct
57 Correct 5 ms 964 KB Output is correct
58 Correct 4 ms 980 KB Output is correct
59 Correct 4 ms 932 KB Output is correct
60 Correct 4 ms 852 KB Output is correct
61 Correct 4 ms 852 KB Output is correct
62 Correct 6 ms 852 KB Output is correct
63 Correct 4 ms 828 KB Output is correct
64 Correct 4 ms 828 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 304 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 154 ms 21436 KB Output is correct
5 Correct 153 ms 21048 KB Output is correct
6 Correct 153 ms 20760 KB Output is correct
7 Correct 139 ms 20084 KB Output is correct
8 Incorrect 107 ms 14824 KB Output isn't correct
9 Halted 0 ms 0 KB -