Submission #1210935

#TimeUsernameProblemLanguageResultExecution timeMemory
1210935loomFuel Station (NOI20_fuelstation)C++20
100 / 100
229 ms26328 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 5e18
#define nl '\n'

const int N = 3e5+1;
int seg[4*N], lz[4*N], arr[N];

void lazy(int l, int r, int p){
   if(lz[p] != 0){
      seg[p] += lz[p];
      
      
      if(l != r){
         lz[p*2] += lz[p];
         lz[p*2+1] += lz[p];
      }
      lz[p] = 0;
   }
}

void build(int l, int r, int p){
   if(l == r){
      seg[p] = arr[l];
      return;
   }

   int m = (l+r)/2;
   build(l, m, p*2);
   build(m+1, r, p*2+1);
   seg[p] = min(seg[p*2], seg[p*2+1]);
}

void upd(int l, int r, int p, int ql, int qr, int v){
   lazy(l, r, p);

   if(qr < l or r < ql) return;
   if(ql <= l and r <= qr){
      lz[p] += v;
      lazy(l, r, p);
      return;
   }

   int m = (l+r)/2;
   upd(l, m, p*2, ql, qr, v);
   upd(m+1, r, p*2+1, ql, qr, v);
   seg[p] = min(seg[p*2], seg[p*2+1]);
}

int qry(){
   return -seg[1];
}

void upd(int ql, int qr, int v){
   upd(0, N-1, 1, ql, qr, v);
}

inline void solve(){
   int n, d;
   cin>>n>>d;

   tuple<int,int,int> st[n];
   for(int i=0; i<n; i++){
      int x, a, b;
      cin>>x>>a>>b;
      st[i] = {x, a, b};
   }
   sort(st, st+n);

   for(int i=0; i<n; i++){
      auto [x, a, b] = st[i];
      arr[i] = -x;
   }
   arr[n] = -d;

   for(int i=0; i<n; i++){
      auto [x, a, b] = st[i];
      st[i] = {b, a, i};
   }
   sort(st, st+n, greater<>());

   build(0, N-1, 1);
   int mn = qry();

   for(int i=0; i<n; i++){
      auto [b, a, ix] = st[i];

      upd(ix+1, n, a);
      if(b >= qry()) mn = min(mn, qry());
   }

   cout<<mn;
}

signed main(){
   ios_base::sync_with_stdio(0);
   cin.tie(NULL);cout.tie(NULL);

   int t = 1;
   //cin>>t;
   while(t--) solve();

   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...