Submission #1133346

#TimeUsernameProblemLanguageResultExecution timeMemory
1133346pokmui9909Treatment Project (JOI20_treatment)C++17
100 / 100
375 ms150752 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define x first #define y second ll N, M, T[100005], L[100005], R[100005], C[100005], D[100005]; vector<ll> G[100005]; set<pair<ll, ll>> Coord[100005]; struct SegTree{ set<pair<ll, ll>> T[400005]; void init(ll n, ll s, ll e){ if(s == e){ T[n] = Coord[s]; return; } ll m = (s + e) / 2; init(n * 2, s, m); init(n * 2 + 1, m + 1, e); T[n] = T[n * 2]; for(auto f : T[n * 2 + 1]) T[n].insert(f); } void qry(ll n, ll s, ll e, ll r, ll t, vector<ll> &V){ if(s > r) return; if(e <= r){ for(auto it = T[n].begin(); it != T[n].end(); ){ if(it->x <= t){ V.push_back(it->y); it = T[n].erase(it); } else { break; } } return; } ll m = (s + e) / 2; qry(n * 2, s, m, r, t, V); qry(n * 2 + 1, m + 1, e, r, t, V); } }seg; int main(){ cin.tie(0) -> sync_with_stdio(0); cin >> N >> M; fill(D, D + 100005, 1e18); priority_queue<pair<ll, ll>> PQ; vector<ll> cp; for(ll i = 1; i <= M; i++){ cin >> T[i] >> L[i] >> R[i] >> C[i]; R[i]++; if(L[i] == 1){ D[i] = C[i]; PQ.push({-C[i], i}); } cp.push_back(L[i] - T[i]); } sort(cp.begin(), cp.end()); cp.erase(unique(cp.begin(), cp.end()), cp.end()); for(ll i = 1; i <= M; i++){ if(L[i] == 1) continue; Coord[lower_bound(cp.begin(), cp.end(), L[i] - T[i]) - cp.begin() + 1].insert({L[i] + T[i], i}); } seg.init(1, 1, 100000); ll Ans = 1e18; while(!PQ.empty()){ ll c = -PQ.top().x, u = PQ.top().y; PQ.pop(); if(R[u] == N + 1){ Ans = min(Ans, c); } vector<ll> V; seg.qry(1, 1, 100000, upper_bound(cp.begin(), cp.end(), R[u] - T[u]) - cp.begin(), R[u] + T[u], V); for(auto v : V){ if(D[v] <= D[u] + C[v]) continue; D[v] = D[u] + C[v]; PQ.push({-D[v], v}); } } cout << (Ans == 1e18 ? -1 : Ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...