fork download
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. int n,m,j=1,ans=1e18,check[300005],st[1200006],lz[1200006];
  5. pair <int,pair<int,int>> p[300005];
  6. void UPDATE(int id, int l, int r, int u, int v, int x)
  7. {
  8. if (l>v || r<u) return;
  9. else if (l>=u && r<=v)
  10. {
  11. st[id]+=x,lz[id]+=x;
  12. return;
  13. }
  14. int mid=(l+r)/2;
  15. st[id*2]+=lz[id],lz[id*2]+=lz[id],st[id*2+1]+=lz[id],lz[id*2+1]+=lz[id],lz[id]=0;
  16. UPDATE(id*2,l,mid,u,v,x),UPDATE(id*2+1,mid+1,r,u,v,x);
  17. st[id]=min(st[id*2],st[id*2+1]);
  18. }
  19. int GET(int id, int l, int r, int u, int v)
  20. {
  21. if (l>v || r<u) return 1e18;
  22. else if (l>=u && r<=v) return st[id];
  23. int mid=(l+r)/2;
  24. st[id*2]+=lz[id],lz[id*2]+=lz[id],st[id*2+1]+=lz[id],lz[id*2+1]+=lz[id],lz[id]=0;
  25. return min(GET(id*2,l,mid,u,v),GET(id*2+1,mid+1,r,u,v));
  26. }
  27. signed main()
  28. {
  29. ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
  30. cin>>n>>m;
  31. for (int i=1;i<=n;i++) cin>>p[i].second.first>>p[i].second.second>>p[i].first;
  32. sort(p+1,p+n+1);
  33. for (int i=1;i<=n;i++)
  34. {
  35. int u=p[i].second.first,v=p[i].second.second,x=p[i].first;
  36. UPDATE(1,1,m-1,u,v-1,x);
  37. while (GET(1,1,m,1,m)!=0)
  38. {
  39. UPDATE(1,1,m-1,p[j].second.first,p[j].second.second-1,-p[j].first);
  40. ans=min(ans,p[i].first-p[j].first),j++;
  41. }
  42. }
  43. cout<<ans;
  44. return 0;
  45. }
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
1000000000000000000