1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| #include <bits/stdc++.h> using namespace std; #define LL long long #define ls rt<<1 #define rs rt<<1|1 #define eps 1e-6 #define mod 1000000007 #define MAXN 1e9 #define MS 1000009
int n,m; struct seg{ int l,r,w; }a[MS]; struct node{ int cnt; int la; }p[MS<<2];
bool cmp(seg t1, seg t2){ return t1.w < t2.w; }
void push_up(int rt){ p[rt].cnt = min(p[ls].cnt, p[rs].cnt); }
void push_down(int rt){ if(p[rt].la){ p[ls].cnt += p[rt].la; p[rs].cnt += p[rt].la; p[ls].la += p[rt].la; p[rs].la += p[rt].la; p[rt].la = 0; } }
void update(int L,int R,int l,int r,int rt,int val){ if(L <= l && r <= R){ p[rt].cnt += val; p[rt].la += val; return; } int m = l+r>>1; push_down(rt); if(m >= L) update(L,R,l,m,ls,val); if(m < R) update(L,R,m+1,r,rs,val); push_up(rt); }
void solve(){ cin >> n >> m; m--; for(int i=1;i<=n;i++){ int l,r,w; cin >> l >> r >> w; r--; a[i] = {l,r,w}; } sort(a+1,a+n+1,cmp); int ans = MAXN; for(int l=1,r=1;r<=n;){ while(r<=n && p[1].cnt<=0){ update(a[r].l,a[r].r,1,m,1,1); r++; } int flag = 0; while(l<=r && p[1].cnt>0){ update(a[l].l,a[l].r,1,m,1,-1); l++; flag = 1; } if(flag) ans = min( ans, (a[r-1].w-a[l-1].w) ); } cout << ans << "\n"; }
int main() { ios::sync_with_stdio(false); int ce;
ce = 1; while(ce--){ solve(); }
return 0; }
|