Submission #447920

#TimeUsernameProblemLanguageResultExecution timeMemory
447920keta_tsimakuridzeEvent Hopping 2 (JOI21_event2)C++14
0 / 100
441 ms112896 KiB
#include<bits/stdc++.h>
#define f first
#define s second
#define int long long
using namespace std;
const int N=2e5+5,mod=1e9+7,LG = 22,inf = mod;
int t,n,k,l[N],r[N],mn[N],mx[N],parR[N][LG],parL[N][LG],Lg,suf[N],pref[N],h1[N],h[N],fix[N],f[N];
vector<int> Ans;
set<pair<int,int> > s;
pair<pair<int,int>,int> p[N];
 main(){
	cin>>n>>k;
	Lg = log2(n) + 1;
	for(int i=1;i<=n;i++){
		cin>>p[i].f.f>>p[i].f.s;
		l[i] = p[i].f.f;
		r[i] = p[i].f.s;
		p[i].s = i;
	}
	sort(p+1,p+n+1);
	p[n+1].f.s = 1e9 + 5;
	mn[n+1] = n+1;
	for(int i=n;i>=1;i--) {
		mn[i] = mn[i+1];
		if(p[i].f.s < p[mn[i]].f.s) mn[i] = i;
		int l = i+1, r = n,id = -1;
		while(l<=r) {
			int mid = (l+r)/2;
			if(p[mid].f.f >= p[i].f.s) {
				id = mid;
				r = mid - 1;
			}
			else l = mid + 1;
		}
		if(id > 0) {
			parR[p[i].s][0] =  p[mn[id]].s;
			h1[p[i].s] = h1[p[mn[id]].s] + 1;
			for(int j=1; j<=Lg; j++) parR[p[i].s][j] = parR[parR[p[i].s][j-1]][j-1];
		}
	}
	for(int i=1;i<=n;i++) {
		swap(p[i].f.f,p[i].f.s);
	}
	sort(p+1,p+n+1);
	p[0].f.s = 0;
	mx[0] = 0;
	for(int i=1;i<=n;i++) {
		mx[i] = mx[i-1];
		if(p[i].f.s > p[mx[i]].f.s) mx[i] = i;		
		int l = 1, r = i-1, id = -1;
		while(l<=r) {
			int mid = (l+r)/2;
			if(p[mid].f.f <= p[i].f.s) {
				id = mid;
				l = mid + 1;
			}
			else r = mid - 1;
		}		
		if(id > 0) {
			parL[p[i].s][0] = p[mx[id]].s;
			h[p[i].s] = h[p[mx[id]].s] + 1;
			
			for(int j=1; j<=Lg; j++) parL[p[i].s][j] = parL[parL[p[i].s][j-1]][j-1];
		}		
	}
	s.insert({-inf,0});
	s.insert({inf,0});
	l[0] = inf;
	r[0] = 0;
	for(int i=1;i<=n;i++){
		int up = (*s.upper_bound({r[i],0})).f;
		int d = (*--s.upper_bound({l[i]+1,0})).f;
		if(l[(*--s.upper_bound({l[i]+1,0})).s] == d) continue;
		if(r[(*s.upper_bound({r[i],0})).s] == up) continue;
		if((*s.upper_bound({l[i],0})).s && (*s.upper_bound({l[i],0})).f < r[i]) continue;
		int u = i;
		int ss =  suf[(*s.upper_bound({r[i],0})).s], pr =  pref[(*--s.upper_bound({l[i]+1,0})).s],ans = 0;
		for(int j=Lg; j>=0; j--) {
			if(parR[u][j] && r[parR[u][j]] <= up) {
				ans += 1<<j;
				u = parR[u][j];
			}
		}
		int ans1 = ans;
		u = i;
		for(int j=Lg; j>=0; j--) {
			if(parL[u][j] && l[parL[u][j]] >= d) {
				ans += 1<<j;
				u = parL[u][j];
			}
		}
		if(ans + pr + ss + 1>=k) {
			pref[i] = pr + ans - ans1 + 1;
			suf[i] = ss + ans1 + 1;
			s.insert({l[i],i});
			s.insert({r[i],i});
			Ans.push_back(i);
			if(Ans.size()==k) break;
		}
	}

	if(!Ans.size()) cout<<-1;
	else {	
	if(Ans.size() != k) {
		int f = 0;
		cout<<n/f;
	}
		int x;
		for(int i=0;i<Ans.size();i++) cout<<Ans[i]<<" ";
	}
	
}

Compilation message (stderr)

event2.cpp:11:2: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   11 |  main(){
      |  ^~~~
event2.cpp: In function 'int main()':
event2.cpp:98:17: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   98 |    if(Ans.size()==k) break;
      |       ~~~~~~~~~~^~~
event2.cpp:104:16: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
  104 |  if(Ans.size() != k) {
      |     ~~~~~~~~~~~^~~~
event2.cpp:109:16: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  109 |   for(int i=0;i<Ans.size();i++) cout<<Ans[i]<<" ";
      |               ~^~~~~~~~~~~
event2.cpp:108:7: warning: unused variable 'x' [-Wunused-variable]
  108 |   int x;
      |       ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...