求大佬改一下
  • 板块P6852 Mex
  • 楼主尤斯蒂亚
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/9/2 16:36
  • 上次更新2023/11/4 08:08:28
查看原帖
求大佬改一下
136596
尤斯蒂亚楼主2021/9/2 16:36
#include<iostream>
#include<stdio.h>
#include<bits/stdc++.h>
#include <algorithm>
using namespace std;
int save[4][100001];
int mexline[100001];
int saveline[100001];
long long int n,m;
int a,b,c;

inline int judge(int count)
{
	for (int i=0;i<=n;i++)
	if (saveline[i]==count) return 1;
	return 0;
}

inline int fill(int num)
{
	for (int i=0;i<=n;i++)
	saveline[i]=1;
	//for (int ij=save[1][m];ij<=save[2][m];ij++)
	//saveline[ij]=1;
	int maxx=1;
	
	for (int i=m;i>=1;i--)
	{
		if (save[3][i]>num) 
		{
			for (int ij=save[1][i];ij<=save[2][i];ij++)
			if (saveline[ij]==m-i)  saveline[ij]=m-i+1;
			maxx=m-i+1;
			continue;
		}
		
		if (save[3][i]==num) 
		{
			for (int ij=save[1][i];ij<=save[2][i];ij++)
			saveline[ij]=0;
		}
		
		if (save[3][i]<num) break;
	}
	
	
	for (int i=0;i<=n;i++)
	if (saveline[i]==maxx and mexline[i]==-1) 
	{mexline[i]=num;return 0;} 
	
	return 1;
} 

int main()
{	
	memset(mexline,-1,sizeof(mexline));
	cin>>n>>m;
	for (int j=1;j<=m;j++)
	{
		scanf("%d%d%d",&save[1][j],&save[2][j],&save[3][j]);
		for (int ii=1;ii<=j-1;ii++)
		if (save[3][j]<=save[3][ii]) 
		{
			a=save[1][j];
			b=save[2][j];
			c=save[3][j];
			for (int ij=j;ij>=ii;ij--)
			{
			save[1][ij]=save[1][ij-1];
			save[2][ij]=save[2][ij-1];
			save[3][ij]=save[3][ij-1];
			}
			save[1][ii]=a;
			save[2][ii]=b;
			save[3][ii]=c;
			break;
		}
	}
	
	//for (int j=1;j<=m;j++)
	//save[1][j]++,save[2][j]++;
	
	for (int ii=0;ii<=n;ii++)
	{
		if (fill(ii)) 
		{
			cout<<"-1"<<endl;return 0;
		}
	}
	
	for (int i=0;i<=n;i++)
	cout<<mexline[i]<<" ";
	
	return 0;
}
/*
	for (int ii=save[1][j];ii<=save[2][j];ii++)
		{
			for (int ij=0;ij<=save[3][j]-1;ij++)
			quene1[ii].okline[ij]=1;
			
		}
		
		struct tree
{
	int okline[500];
	int	noline[500];
}queue1[500000];

	for (int j=1;j<=m;j++)
	cout<<save[1][j]<<" "<<save[2][j]<<" "<<save[3][j]<<" "<<endl;
	
		for (int i=0;i<=n;i++)
	cout<<mexline[i]<<" ";
	cout<<endl<<endl;
	
	for (int i=0;i<=n;i++)
			cout<<saveline[i]<<" ";
			cout<<endl;
			cout<<i<<endl;
			
			
				for (int i=0;i<=n;i++)
	cout<<saveline[i]<<" ";
	cout<<endl;
	

	
	cout<<num<<"!"<<maxx<<endl;
	*/
2021/9/2 16:36
加载中...