Distinct Values
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3336 Accepted Submission(s): 523
Problem Description
Chiaki has an array of n positive integers. You are told some facts about the array: for every two elements ai and aj in the subarray al..r (l≤i
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
const int maxn=1e5+10;
priority_queue<int,vector<int>,greater<int> > q;
struct node
{
int l,r;
}e[maxn];
int cmp(node a,node b)
{
if(a.l==b.l) return a.r>b.r;
return a.l<b.l;
}
int a[maxn];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&e[i].l,&e[i].r);
}
sort(e+1,e+1+m,cmp);
while(!q.empty()) q.pop();
for(int i=1;i<=n;i++){
a[i]=0;
q.push(i);
}
int cs=1;
int pre=1;
int flag=1;
for(int i=1;i<=m;i++){
if(e[i-1].l==e[i].l) continue;
while(pre<e[i].l){
if(a[pre]==1&&flag==0){
q.push(a[pre]);
flag=1;
}else if(a[pre]!=0){
q.push(a[pre]);
}
else a[pre]=1;
pre++;
}
cs=max(pre,cs);
for(int j=cs;j<=e[i].r;j++){
if(a[j]==0){
a[j]=q.top();
if(a[j]==1){
flag=0;
}
q.pop();
}
}
cs=max(cs,e[i].r+1);
}
cs=max(cs,e[m].r+1);
for(int i=cs;i<=n;i++)
a[i]=1;
for(int i=1;i<=n;i++){
printf("%d%c",a[i],i==n?'\n':' ');
}
}
return 0;
}