Submission #762226

#TimeUsernameProblemLanguageResultExecution timeMemory
762226minhcoolHighway Tolls (IOI18_highway)C++17
Compilation error
0 ms0 KiB
#ifndef local #include "meetings.h" #endif #include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using namespace std; #define ll long long #define fi first #define se second #define pb push_back #define mp make_pair typedef pair<ll, ll> ii; typedef pair<ii, ll> iii; typedef pair<ii, ii> iiii; const ll N = 3e5 + 5; const ll oo = 1e18 + 7, mod = 1e9 + 7; mt19937 rng(1); ll rnd(ll l, ll r){ ll temp = rng() % (r - l + 1); return abs(temp) + l; } ll n, q; ll arr[N], sum[N]; int which[N]; int maxi[N][20]; ii streaks[N]; int gett(ii a, ii b){ // cout << a.fi << " " << a.se << " " << b.fi << " " << b.se << "\n"; return max(0LL, (min(a.se, b.se) - max(a.fi, b.fi) + 1)); } int get(int l, int r){ if(l > r) return -1; int k = log2(r - l + 1); return max(maxi[l][k], maxi[r - (1LL << k) + 1][k]); } vector<ll> minimum_costs(vector<int> H, vector<int> L, vector<int> R){ n = H.size(), q = L.size(); for(ll i = 0; i < n; i++) arr[i] = H[i]; if(n <= 5000 && q <= 5000){ vector<ll> v; for(ll i = 0; i < q; i++){ ll le = L[i], ri = R[i]; for(ll j = le; j <= ri; j++) sum[j] = 0; stack<ii> q; ll total = 0; for(ll j = le; j <= ri; j++){ ll tol = 0; while(!q.empty() && q.top().fi <= arr[j]){ tol += q.top().se; total += q.top().se * (arr[j] - q.top().fi); q.pop(); } tol++; total += arr[j]; sum[j] += total; q.push({arr[j], tol}); } while(!q.empty()) q.pop(); total = 0; for(ll j = ri; j >= le; j--){ ll tol = 0; while(!q.empty() && q.top().fi <= arr[j]){ tol += q.top().se; total += q.top().se * (arr[j] - q.top().fi); q.pop(); } tol++; total += arr[j]; sum[j] += total; q.push({arr[j], tol}); } ll mini = oo; for(ll j = le; j <= ri; j++) mini = min(mini, sum[j] - arr[j]); v.pb(mini); } return v; } else{ streaks[0] = {-1, -1}; int lst = -1, cnt = 0; for(int i = 0; i <= n; i++){ if(arr[i] == 1){ if(lst == -1){ lst = i; cnt++; } } else{ if(lst != -1){ streaks[cnt] = {lst, i - 1}; // cout << cnt << " " << streaks[cnt].fi << " " << streaks[cnt].se << "\n"; for(int j = lst; j < i; j++) which[j] = cnt; maxi[cnt][0] = (i - lst); lst = -1; } which[i] = cnt; } } for(int i = 1; i <= 19; i++){ for(int j = 1; (j + (1LL << i) - 1) <= cnt; j++) maxi[j][i] = max(maxi[j][i - 1], maxi[j + (1LL << (i - 1))][i - 1]); } vector<ll> answer; for(int i = 0; i < q; i++){ int le = L[i], ri = R[i]; int mx_len = 0; if(which[le] == which[ri]) mx_len = max(mx_len, gett(streaks[which[le]], make_pair((ll)le, (ll)ri))); else{ mx_len = max(mx_len, gett(streaks[which[le]], make_pair((ll)le, (ll)ri))); mx_len = max(mx_len, gett(streaks[which[ri]], make_pair((ll)le, (ll)ri))); mx_len = max(mx_len, get(which[le] + 1, which[ri] - 1)); } answer.pb((ri - le + 1) * 2 - mx_len); } return answer; } } #ifdef local void process(){ ll n, q; cin >> n >> q; vector<int> h(n), l(q), r(q); for(ll i = 0; i < n; i++) cin >> h[i]; for(ll i = 0; i < q; i++) cin >> l[i] >> r[i]; vector<ll> v = minimum_costs(h, l, r); for(auto it : v) cout << it << " "; cout << "\n"; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); process(); } #endif

Compilation message (stderr)

highway.cpp:2:10: fatal error: meetings.h: No such file or directory
    2 | #include "meetings.h"
      |          ^~~~~~~~~~~~
compilation terminated.