func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 2147483647;   const int N = 300010;   int n, m, ans, ansx, ansy, s1, s2, max1;   struct aa {     int x, y, w;   } a[N], b[N << 1];   multiset<int> q1, q2;   void Init(int &x) {     char y;     while ((y = getchar()) <  0  || y >  9 )       ;     x = y -  0 ;     while ((y = getchar()) >=  0  && y <=  9 ) x = (x << 3) + (x << 1) + y -  0 ;   }   bool cmp(aa x, aa y) { return x.x < y.x || x.x == y.x && x.y < y.y; }   int main() {     scanf( %d%d , &n, &m);     memset(a, 0, sizeof(a));     for (int i = 1; i <= n; ++i) scanf( %d%d , &a[i].x, &a[i].y);     for (int i = 1; i <= n; ++i)       b[(i << 1) - 1].x = a[i].x, b[(i << 1) - 1].y = 0, b[i << 1].x = a[i].y,                    b[i << 1].y = 1, b[i << 1].w = i;     n <<= 1;     sort(b + 1, b + n + 1, cmp);     ans = 0;     ansx = 0;     ansy = 0;     s1 = 0;     s2 = 0;     q1.clear();     q2.clear();     for (int i = 1; i <= n; ++i)       if (b[i].y) {         if (s1 == m && b[i].x - max1 + 1 > ans) {           ansx = max1;           ansy = b[i].x;           ans = ansy - ansx + 1;         }         if (a[b[i].w].x > max1)           q2.erase(q2.find(a[b[i].w].x)), --s2;         else {           q1.erase(q1.find(a[b[i].w].x));           --s1;           if (s2)             q1.insert(max1 = *q2.begin()), q2.erase(q2.begin()), ++s1, --s2;           else if (s1)             max1 = *q1.rbegin();         }       } else {         if (s1 < m)           q1.insert(b[i].x), ++s1, max1 = b[i].x;         else           q2.insert(b[i].x), ++s2;       }     printf( %d n , ans);     bool flag = 0;     if (ans == 0) {       for (int i = 1; i < m; ++i) printf( %d  , i);       printf( %d n , m);       return 0;     }     for (int i = 1; i <= n && m; ++i)       if (a[i].x <= ansx && a[i].y >= ansy) {         if (flag)           putchar(   );         else           flag = 1;         printf( %d , i);         --m;       }     putchar(  n );     return 0;   }   