Submission #1219649

#TimeUsernameProblemLanguageResultExecution timeMemory
1219649siewjhTreatment Project (JOI20_treatment)C++20
100 / 100
257 ms30672 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 100005; vector<int> dsct; vector<pair<int, int>> inct[MAXN], dect[MAXN]; int pro[MAXN]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int N, M; cin >> N >> M; N++; vector<tuple<int, int, int, ll>> pa(M); for (int i = 0; i < M; i++){ int t, l, r; ll c; cin >> t >> l >> r >> c; r++; pa[i] = {t, l, r, c}; dsct.push_back(t); } sort(dsct.begin(), dsct.end()); dsct.resize(distance(dsct.begin(), unique(dsct.begin(), dsct.end()))); priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq; for (int i = 0; i < M; i++){ int t, l, r; ll c; tie(t, l, r, c) = pa[i]; int tid = lower_bound(dsct.begin(), dsct.end(), t) - dsct.begin() + 1; for (int x = M - tid + 1; x <= M; x += (x & -x)) inct[x].push_back({l + t, i}); for (int x = tid; x <= M; x += (x & -x)) dect[x].push_back({l - t, i}); if (l == 1){ pro[i] = 1; pq.push({c, i}); } } for (int i = 1; i <= M; i++){ sort(inct[i].begin(), inct[i].end(), greater<pair<ll, int>>()); sort(dect[i].begin(), dect[i].end(), greater<pair<ll, int>>()); } while (!pq.empty()){ ll cc; int cn; tie(cc, cn) = pq.top(); pq.pop(); int t, l, r; tie(t, l, r, ignore) = pa[cn]; if (r == N){ cout << cc; return 0; } int tid = lower_bound(dsct.begin(), dsct.end(), t) - dsct.begin() + 1; for (int x = M - tid + 1; x; x -= (x & -x)) while (!inct[x].empty() && inct[x].back().first <= r + t){ int nn = inct[x].back().second; inct[x].pop_back(); if (pro[nn]) continue; pro[nn] = 1; pq.push({cc + get<3>(pa[nn]), nn}); } for (int x = tid; x; x -= (x & -x)) while (!dect[x].empty() && dect[x].back().first <= r - t){ int nn = dect[x].back().second; dect[x].pop_back(); if (pro[nn]) continue; pro[nn] = 1; pq.push({cc + get<3>(pa[nn]), nn}); } } cout << -1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...