Submission #862681

#TimeUsernameProblemLanguageResultExecution timeMemory
862681Cyber_WolfOsumnjičeni (COCI21_osumnjiceni)C++17
0 / 110
113 ms11288 KiB
#include <bits/stdc++.h>

using namespace std;

#define lg long long 

const lg N = 2e5+5;

lg l[N], r[N], anc[N][20], n;

int main()
{
	lg n;
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		cin >> l[i] >> r[i];
	}
	lg en = 1;
	multiset<array<lg, 2>> se;
	se.insert({l[1], r[1]});
	for(int i = 1; i <= n; i++)
	{
		while(en+1 <= n)
		{
			auto it = se.lower_bound({l[en], l[en]});
			if(it != se.end() && (*it)[0] >= l[en] && (*it)[0] <= r[en])
			{
				break;
			}
			if(it != se.begin())
			{
				it--;
				if((*it)[1] >= l[en] && (*it)[1] <= r[en])
				{
					break;
				}
			}
			se.insert({l[en], r[en]});
			en++;
		}
		anc[i][0] = en;
		se.erase(se.find({l[i], r[i]}));
	}
	for(int i = n; i >= 1; i--)
	{
		for(int j = 1; j < 20; j++)
		{
			anc[i][j] = anc[anc[i][j-1]+1][j-1];
		}
	}
	lg q;
	cin >> q;
	while(q--)
	{
		lg a, b;
		cin >> a >> b;
		lg ans = 0;
		for(int i = 19; i >= 0 && a <= b; i--)
		{
			if(anc[a][i] <= b && anc[a][i])
			{
				ans += (1ll << i);
				a = anc[a][i]+1;
			}
		}
		cout << ans << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...