func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 3e5 + 5;   const int M = 205;   const int MOD = 1e9 + 7;   const int INF = 0x3f3f3f3f;   struct node {     int l, r, id;   } p[N << 1];   bool cmp(node a, node b) { return a.r < b.r; }   int sum[N << 4];   void update(int p, int L, int R, int pos) {     if (L == R) {       sum[pos]++;       return;     }     int mid = (L + R) >> 1;     if (p <= mid)       update(p, L, mid, pos << 1);     else       update(p, mid + 1, R, pos << 1 | 1);     sum[pos] = sum[pos << 1] + sum[pos << 1 | 1];   }   int query(int k, int L, int R, int pos) {     if (L == R) return L;     int mid = (L + R) >> 1;     if (k <= sum[pos << 1])       return query(k, L, mid, pos << 1);     else       return query(k - sum[pos << 1], mid + 1, R, pos << 1 | 1);   }   int n, k, x[N << 1];   vector<int> Ans;   int main() {     scanf( %d%d , &n, &k);     for (int i = 0; i < n; i++)       scanf( %d%d , &p[i].l, &p[i].r), p[i].id = i + 1, x[i * 2] = p[i].l,                                        x[i * 2 + 1] = p[i].r;     sort(p, p + n, cmp);     sort(x, x + 2 * n);     int m = unique(x, x + 2 * n) - x;     for (int i = 0; i < n; i++) {       p[i].l = lower_bound(x, x + m, p[i].l) - x;       p[i].r = lower_bound(x, x + m, p[i].r) - x;     }     int ans = 0, st, ed;     for (int i = n - 1; i >= 0; i--) {       update(p[i].l, 0, m - 1, 1);       if (sum[1] < k) continue;       int pos = query(k, 0, m - 1, 1);       int len = x[p[i].r] - x[pos] + 1;       if (len > ans) ans = len, st = pos, ed = p[i].r;     }     if (!ans) {       puts( 0 );       for (int i = 1; i <= k; i++) printf( %d  , i);     } else {       printf( %d n , ans);       for (int i = 0; i < n; i++)         if (p[i].l <= st && ed <= p[i].r) Ans.push_back(p[i].id);       sort(Ans.begin(), Ans.end());       for (int i = 0; i < k; i++) printf( %d  , Ans[i]);     }     return 0;   }   