Submission #652162

#TimeUsernameProblemLanguageResultExecution timeMemory
652162victor_gaoEvent Hopping 2 (JOI21_event2)C++17
7 / 100
81 ms17024 KiB
//#pragma GCC optimize("Ofast,unroll-loops,O3")
//#pragma GCC optimize("avx,avx2,sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,fma,tune=native")
#include<bits/stdc++.h>
//#include<bits/extc++.h>
//#pragma pack(1)
#define fast ios::sync_with_stdio(0); cin.tie(0);
#define int long long
#define pii pair<int,int>
#define x first
#define y second
#define N 100015
using namespace std;
//using namespace __gnu_pbds;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
//typedef tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update> order_multiset;
//typedef tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> order_set;
struct lisan{
    vector<int>vt;
    void in(int x){ vt.push_back(x); }
    void build(){
        sort(vt.begin(),vt.end());
        vt.resize(unique(vt.begin(),vt.end())-vt.begin());
    }
    int find(int x){ return upper_bound(vt.begin(),vt.end(),x)-vt.begin(); }
}uni;
int n,k;
pii seg[N];
vector<int>ans,dp(2*N+5,0LL),all[2*N+5];

signed main(){
    fast
    cin>>n>>k;
    for (int i=1;i<=n;i++){
        cin>>seg[i].x>>seg[i].y;
        uni.in(seg[i].x); uni.in(seg[i].y);
    }
    uni.build();
    for (int i=1;i<=n;i++){
        seg[i].x=uni.find(seg[i].x);
        seg[i].y=uni.find(seg[i].y);
        all[seg[i].x].push_back(seg[i].y);
    }
    for (int i=2*N+3;i>=0;i--){
        dp[i]=max(dp[i],dp[i+1]);
        for (auto j:all[i])
            dp[i]=max(dp[i],dp[j]+1);
    }
    int r=0,need=k;
    for (int i=1;i<=n;i++){
        if (seg[i].x>=r&&dp[seg[i].y]>=need-1){
            ans.push_back(i);
            r=seg[i].y;
            need--;
        }
        if (need==0) break;
    }
    if (need==0){
        for (auto i:ans)
            cout<<i<<'\n';
    }
    else cout<<"-1\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...