func_code_string: #include <bits/stdc++.h>   int temp[500000], a[500000], indices[500000], increments[500000],       previous_appearance[500000], numbers_equal_c[500000];   void mergesort(int Array[], int indices[], int first, int last) {     if (first == last) return;     int middle = (first + last) / 2;     mergesort(Array, indices, first, middle);     mergesort(Array, indices, middle + 1, last);     int i, j, k;     for (i = first, j = first, k = middle + 1; i <= last; i++) {       if (j == middle + 1)         temp[i] = indices[k++];       else if (k == last + 1)         temp[i] = indices[j++];       else if (Array[indices[k]] < Array[indices[j]])         temp[i] = indices[k++];       else         temp[i] = indices[j++];     }     for (i = first; i <= last; i++) {       indices[i] = temp[i];     }   }   int main() {     int n, i, one_counter = 0, c, maximum_increament = 0, number_equal_to_c = 0;     scanf( %d %d , &n, &c);     for (i = 0; i < n; i++) {       scanf( %d , &a[i]);       indices[i] = i;       previous_appearance[i] = -1;       numbers_equal_c[i] = 0;       increments[i] = 0;     }     mergesort(a, indices, 0, n - 1);     for (i = 1; i < n; i++) {       if (a[indices[i]] == a[indices[i - 1]]) {         previous_appearance[indices[i]] = indices[i - 1];       }     }     for (i = 0; i < n; i++) {       if (a[i] == c) {         number_equal_to_c++;       } else {         if (previous_appearance[i] == -1 ||             increments[previous_appearance[i]] - number_equal_to_c +                     numbers_equal_c[previous_appearance[i]] + 1 <=                 0)           increments[i] = 1;         else           increments[i] = increments[previous_appearance[i]] - number_equal_to_c +                           numbers_equal_c[previous_appearance[i]] + 1;         if (maximum_increament < increments[i])           maximum_increament = increments[i];       }       numbers_equal_c[i] = number_equal_to_c;     }     printf( %d , number_equal_to_c + maximum_increament);     return 0;   }   