Submission #1299676

#TimeUsernameProblemLanguageResultExecution timeMemory
1299676chaitanyamehtaFuel Station (NOI20_fuelstation)C++20
100 / 100
496 ms59140 KiB
#include<bits/stdc++.h> using namespace std; #define int long long int n , D; struct Station{ int x ,a , b; }; vector<Station> w; bool cmp(Station& a , Station& b){ return a.b > b.b; } bool cmp1(Station&a , Station& b){ return a.x < b.x; } struct Segtree{ vector<int> s , lz; int sz = 1; void init(int n){ while(sz < n)sz*=2; s.resize(sz*2 , -1); lz.resize(2*sz); } void build(vector<int>& v){ for(int i = 0 ;i <= n; i++)s[sz+i] = v[i]; for(int i =sz-1; i>= 1 ; i--) s[i] = max(s[2*i] , s[2*i+1]); } void apply(int node , int val){ s[node] += val; lz[node]+=val; } void push(int node){ if(lz[node] != 0){ apply(node*2 , lz[node]); apply(node*2+1 , lz[node]); lz[node] = 0; } } void pull(int node){ s[node] = max(s[node*2] , s[node*2+1]); } void range_add(int lq ,int rq , int val , int l , int r , int node){ if(rq < l || lq > r)return; if(lq <= l && r <= rq){ apply(node , val); return; } push(node); int mid = (l + r) / 2; range_add(lq , rq , val , l , mid , node*2); range_add(lq , rq , val , mid+1 , r , node*2+1); pull(node); } void range_add(int l , int r ,int val){ if(l > r)return; range_add(l , r , val , 0 , sz-1 , 1); } int query(){ return s[1]; } }; signed main(){ ios::sync_with_stdio(0); cin.tie(0) , cout.tie(0); cin>>n>>D; w.resize(n); for(int i = 0 ; i < n ;i++){ cin>>w[i].x>>w[i].a>>w[i].b; } int m = n + 1; Segtree st; st.init(m); vector<int> v(m); vector<Station> byB = w , byX = w; byB.push_back({D , 0 , LLONG_MAX/4}); sort(byB.begin() , byB.end() , cmp); byX.push_back({D , 0 , LLONG_MAX / 4}); sort(byX.begin() , byX.end() , cmp1); for(int i = 0 ; i< m ; i++){ v[i] = byX[i].x; } st.build(v); map<int , int> mp; for(int i = 0 ; i <= n; i++){ mp[byX[i].x] = i; } int ans = D; for(int i = 0 ;i<= n ;i++){ int t= byB[i].b; int idx = mp[byB[i].x]; st.range_add(idx +1, n , -byB[i].a); // st.range_add() int temp = max(0LL , st.query()); if(temp <= t){ ans = min(ans , temp); } } cout<<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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...