Submission #1009020

#TimeUsernameProblemLanguageResultExecution timeMemory
1009020PenguinsAreCuteTrampoline (info1cup20_trampoline)C++17
100 / 100
661 ms41396 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
using ii = pair<int,int>;
vector<int> adj[200005];
int pa[200005], h[200005], j[200005];
void dfs(int x) {
	for(auto i: adj[x]) {
		h[i] = h[x] + 1;
		j[i] = (h[j[j[x]]]+h[x]==(h[j[x]]<<1)?j[j[x]]:x);
		dfs(i);
	}
}
int lift(int x, int t) {
	while(h[x]>t) x=(h[j[x]]<t?pa[x]:j[x]);
	return x;
}
main() {
	int r, c, n; cin >> r >> c >> n;
	vector<ii> v;
	for(int x,y,i=0;i<n;i++) {
		cin >> x >> y;
		v.push_back({x,y});
	}
	sort(v.begin(),v.end());
	for(int i=0;i<n;i++) {
		auto [x,y] = v[i];
		auto it = lower_bound(v.begin(),v.end(),ii(x+1,y));
		if(it==v.end()||(*it).first>x+1) pa[i]=n;
		else pa[i]=it-v.begin();
		adj[pa[i]].push_back(i);
	}
	j[n] = n; dfs(n);
	int t; cin >> t;
	for(int x1,y1,x2,y2;t--;) {
		cin >> x1 >> y1 >> x2 >> y2;
		if(x1==x2) {
			cout << (y1<=y2?"Yes\n":"No\n");
			continue;
		}
		if(x1>x2) {
			cout << "No\n";
			continue;
		}
		auto it = lower_bound(v.begin(),v.end(),ii(x1,y1));
		if(it==v.end()||(*it).first>x1) {
			cout << "No\n";
			continue;
		}
		int green = it - v.begin();
		if(h[green]<x2-x1-1) {
			cout << "No\n";
			continue;
		}
		int dest = lift(green,h[green]-(x2-x1-1));
		cout << (dest!=n && v[dest].first==x2-1 && v[dest].second<=y2 ? "Yes\n" : "No\n");
	}
}

Compilation message (stderr)

trampoline.cpp:18:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   18 | main() {
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...