제출 #997261

#제출 시각아이디문제언어결과실행 시간메모리
997261amirhoseinfar1385Restore Array (RMI19_restore)C++17
100 / 100
235 ms1112 KiB
#include<bits/stdc++.h>
using namespace std;
const int maxn=5000+10;
vector<pair<int,int>>adj[maxn];
int f=0,n,m,dis[maxn];
/*
	if w==0{
		ps[r]<=ps[l]+(len-k)
	}else{
		ps[r]-(len-k+1)>=ps[l]
	}
*/

void vorod(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		adj[i-1].push_back(make_pair(1,i));
		adj[i].push_back(make_pair(0,i-1));
	}
	for(int i=0;i<m;i++){
		int l,r,k,w;
		cin>>l>>r>>k>>w;
		r++;
		int len=r-l;
		if(w==0){
			adj[l].push_back(make_pair(len-k,r));
		}else{
			adj[r].push_back(make_pair(-(len-k+1),l));
		}
	}
}

void caldis(){
	dis[0]=0;
	for(int i=1;i<=n;i++){
		dis[i]=n*10;
	}
	for(int ted=0;ted<=n;ted++){
		for(int i=0;i<=n;i++){
			for(auto x:adj[i]){
				dis[x.second]=min(dis[x.second],dis[i]+x.first);
			}
		}
	}
	for(int i=0;i<=n;i++){
		for(auto x:adj[i]){
			if(dis[x.second]>dis[i]+x.first){
				f=1;
				break;
			}
		}
	}
}

void khor(){
	if(f){
		cout<<-1<<"\n";
		return ;
	}
	for(int i=1;i<=n;i++){
		if(dis[i]==dis[i-1]){
			cout<<0<<" ";
		}else{
			cout<<1<<" ";
		}
	}
	cout<<"\n";
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	vorod();
	caldis();
	khor();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...