Submission #519240

#TimeUsernameProblemLanguageResultExecution timeMemory
519240hohohahaRestore Array (RMI19_restore)C++14
20 / 100
1095 ms4080 KiB
#include<bits/stdc++.h> 
using namespace std;
#define fori(i, a, b) for(int i = (int) (a); i <= (int) (b); i++)
#define ford(i, a, b) for(int i = (int) (a); i >= (int) (b); i--)
#define fi first
#define se second
#define all(x) begin(x), end(x)
#define ii pair<int, int>
#define pb push_back
#define pf push_front
#define em emplace
#define ef emplace_front
#define eb emplace_back
#define om pop
#define of pop_front
#define ob pop_back
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); 
#define rand rng
#define endl '\n'
#define sp ' '
void solve(); 
signed main() { 
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); 
	int test_num = 1; 
	fori(test, 1, test_num) { 
		solve(); 
	}
}
#define int long long
const int maxn = 1e5 + 5, inf = LLONG_MAX / 100ll; 
int n, m; 
vector<pair<int, int> > g[maxn]; 	
int pref[maxn]; 
bool inq[maxn]; 
int up_cnt[maxn];  
void solve() { 
	cin >> n >> m; 
	fori(i, 0, n) { 
	 	if(i >= 1) { 
			g[i].eb(i - 1, 0); 
	 		g[i - 1].eb(i, 1); 
	 	}
	 }
	fori(i, 1, m) { 
		int l, r, k, val; 
		cin >> l >> r >> k >> val; l++; r++; 
		if(val == 0) {
			g[l - 1].eb(r, (r - l + 1) - k); 
		}
		else { 
			g[r].eb(l - 1, -((r - l + 1) - k + 1)); 
		}
	}
	fill(all(pref), inf); 
	pref[0] = 0; 
	deque<int> q; q.eb(0); inq[0] = 1; 
	int sum_dis = 0; 
	while(q.size()) { 
		int u = q.front(); q.of(); inq[u] = 0; sum_dis -= pref[u]; 
		if(pref[u] * q.size() > sum_dis) { 
			q.push_back(u); 
		}
		else {
			for(ii e: g[u]) { 
				int v = e.fi, w = e.se; 
	//			cout << u << " -> " << v << endl; 
				if(pref[v] > pref[u] + w) { 
					if(inq[v]) sum_dis -= pref[v]; 
					
					pref[v] = pref[u] + w; 
					up_cnt[v]++; 
					if(up_cnt[v] > n) { 
						cout << -1; 
						return; 
					}
					if(!inq[v]) { 
						if(q.empty() or pref[v] < pref[q.front()]) q.ef(v); 
						else q.eb(v); 
						inq[v] = 1; 
					}
					
					sum_dis += pref[v]; 
				}
			}
		}
	}
	fori(i, 1, n) { 
		cout << pref[i] - pref[i - 1] << sp; 
	}
}

Compilation message (stderr)

restore.cpp: In function 'void solve()':
restore.cpp:60:25: warning: comparison of integer expressions of different signedness: 'long long unsigned int' and 'long long int' [-Wsign-compare]
   60 |   if(pref[u] * q.size() > sum_dis) {
      |      ~~~~~~~~~~~~~~~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...