Submission #1162314

#TimeUsernameProblemLanguageResultExecution timeMemory
1162314Zero_OPMarathon Race 2 (JOI24_ho_t3)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h> using namespace std; #define FOR(i, l, r) for(int i = (l); i < (r); ++i) #define ROF(i, r, l) for(int i = (r) - 1; i >= (l); --i) #define mp make_pair #define mt make_tuple #define ff first #define ss second #define all(v) begin(v), end(v) #define rall(v) rbegin(v), rend(v) #define sz(v) (int)v.size() #define pb push_back #define eb emplace_back #define compact(v) v.erase(unique(all(v)), end(v)) #define dbg(x) "[" #x " = " << (x) << "]" template<typename T> bool minimize(T& a, const T& b){ if(a > b) return a = b, true; return false; } template<typename T> bool maximize(T& a, const T& b){ if(a < b) return a = b, true; return false; } using ll = long long; using db = double; using ld = long double; using ull = unsigned long long; using pi = pair<int, int>; using pl = pair<ll, ll>; using pd = pair<db, db>; using vi = vector<int>; using vl = vector<ll>; using vb = vector<bool>; using vc = vector<char>; using vd = vector<db>; using vpi = vector<pi>; using vpl = vector<pl>; void setIO(){ ios_base::sync_with_stdio(0); cin.tie(0); #ifdef LOCAL freopen("task.inp", "r", stdin); freopen("task.out", "w", stdout); #endif // LOCAL } const int MAX = 5e5 + 5; int N, L, Q, X[MAX], pref[MAX], suff[MAX], d[MAX]; ll sum_pref_d[MAX], sum_suff_d[MAX]; vpi v; int query_collected(int l, int r){ return pref[r] - (l > 0 ? pref[l-1] : 0); } ll query_sum_pref_d(int l, int r){ if(l > r) return 0; return sum_pref_d[r] - (l > 0 ? sum_pref_d[l-1] : 0); } ll query_sum_suff_d(int l, int r){ if(l > r) return 0; return sum_suff_d[l] - sum_suff_d[r+1]; } ll calc(int i, int j, int k){ ll cost = 0; int visited = 0; if(i < j){ cost += v[j].ff - v[i].ff + query_sum_suff_d(i, j-1); visited = query_collected(i, j); } else{ cost += v[i].ff - v[j].ff + query_sum_pref_d(j, i-1); visited = query_collected(j, i); } if(i < k){ cost += 1LL * visited * (v[k].ff - v[i].ff) + query_sum_pref_d(i, k-1); } else{ cost += 1LL * visited * (v[k].ff - v[i].ff) + query_sum_suff_d(k, i-1); } return cost; } int main(){ setIO(); cin >> N >> L; FOR(i, 0, N) cin >> X[i]; sort(X, X + N); FOR(i, 0, N){ if(v.empty() || v.back().ff != X[i]) v.eb(X[i], 1); else ++v.back().ss; } FOR(i, 0, sz(v)-1) d[i] = v[i+1].ff - v[i].ff; FOR(i, 0, sz(v)) pref[i] = (i > 0 ? pref[i-1] : 0) + v[i].ss; ROF(i, sz(v), 0) suff[i] = (i+1 < sz(v) ? suff[i+1] : 0) + v[i].ss; FOR(i, 0, sz(v)-1) sum_pref_d[i] = (i > 0 ? sum_pref_d[i-1] : 0) + 1LL * (pref[i]+1) * d[i]; ROF(i, sz(v)-1, 0) sum_suff_d[i] = sum_suff_d[i+1] + 1LL * (suff[i]+1) * d[i]; int m = sz(v); cin >> Q; while(Q--){ int S, G, T; cin >> S >> G >> T; // cout << S << ' ' << G << ' ' << T << '\n'; ll best = 1e18; FOR(i, sz(v)-1, sz(v)){ minimize(best, calc(i, 0, m-1) + abs(S - v[i].ff) + 1LL * (N+1) * abs(G - v[m-1].ff)); minimize(best, calc(i, m-1, 0) + abs(S - v[i].ff) + 1LL * (N+1) * abs(G - v[0].ff)); } best += N; // cout << best << '\n'; cout << (best <= T ? "Yes\n" : "No\n"); } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...