[ HDU6301 ] Distinct Values

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
priority_queue<int,vector<int>,greater<int> > Q;
pair<int,int> a[maxn];
int b[maxn];
int n,m;
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		while(!Q.empty()) Q.pop();
		scanf("%d%d",&n,&m);
		for(int i=1;i<=m;i++)
			scanf("%d%d",&a[i].first,&a[i].second);
		sort(a+1,a+1+m);
		for(int i=1;i<=n;i++)
			Q.push(i),b[i]=1;
		for(int i=1,l=1,r=0;i<=m;i++)
		{
			if(a[i].second<=r) continue;
			while(l<a[i].first)
				Q.push(b[l++]);
			while(r<a[i].second)
				b[++r]=Q.top(),Q.pop();
		}
		for(int i=1;i<=n;i++)
			printf("%d%c",b[i],i==n?'\n':' ');
	}
	return 0;
}

Leave a Reply

Your email address will not be published.