Submission #1343130

#TimeUsernameProblemLanguageResultExecution timeMemory
1343130guilhermecppRestore Array (RMI19_restore)C++20
100 / 100
418 ms1348 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long
#define fi first
#define se second
#define pb push_back
// #define endl '\n'

typedef pair<int,int> pii;

const int N = 5005;
const int mod = 998244353;
const int INF = (int)(1e9)+5;

struct Edge
{
	int u, v, w;
	bool operator < (Edge e) const
	{
		if(w!=e.w) return w<e.w;
		if(u!=e.u) return u<e.u;
		return v<e.v;
	}
};

int n, q;
vector<Edge> edges;
int dist[N];

bool BF(int init)
{
	for(int i = 0;i <= n;i++) dist[i] = INF;
	dist[init] = 0;
	for(int k = 0;k <= n;k++)
		for(auto [u,v,w] : edges)
			if(dist[u]!=INF && dist[v]>dist[u]+w)
				dist[v] = dist[u]+w;
	for(auto [u,v,w] : edges)
		if(dist[u]!=INF && dist[v]>dist[u]+w)
			return false;
	return true;
}

void Range(int u, int v, int l, int r)
{
	edges.pb({u,v,-l});
	edges.pb({v,u,r});
	return;
}

int32_t main() 
{

    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

	cin >> n >> q;
	for(int i = 1;i <= n;i++) Range(i, i-1, 0, 1);
	while(q--)
	{
		int l, r, k, op;
		cin >> l >> r >> k >> op;
		l++, r++;
		int t = r-l+1;
		if(op==0)	Range(r, l-1, 0, t-k);
		else		Range(r, l-1, t-k+1, t);
	}

	if(!BF(n))
	{
		cout << -1 << endl;
		return 0;
	}

	for(int i = 1;i <= n;i++) cout << (dist[i-1]==dist[i] ? 0 : 1) << " ";
	cout << endl;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...