func_code_string: #include <bits/stdc++.h>   using namespace std;   bool voltea;   int A[100005], B[100005], I[100005], D[100005], R[100005], ctos, hay, x, y, mid,       en;   int Z[100005], grande;   void lis() {     B[1] = A[1];     if (voltea)       D[ctos] = 1;     else       I[1] = 1;     hay = 1;     for (int i = 2; i <= ctos; i++) {       if (A[i] > B[hay]) {         ++hay;         B[hay] = A[i];         en = hay;       } else {         x = 1;         y = hay;         while (x < y) {           mid = (x + y) / 2;           if (B[mid] < A[i]) {             x = mid + 1;           } else {             y = mid;           }         }         B[x] = A[i];         en = x;       }       if (voltea) {         D[ctos - i + 1] = en;       } else {         I[i] = en;       }     }   }   int main() {     scanf( %d , &ctos);     for (int i = 1; i <= ctos; i++) {       scanf( %d , &A[i]);     }     lis();     voltea = true;     x = 1;     y = ctos;     while (x < y) {       swap(A[x], A[y]);       A[x] *= -1;       A[y] *= -1;       ++x;       --y;     }     if (x == y) {       A[x] *= -1;     }     lis();     grande = 1;     for (int i = 1; i <= ctos; i++) {       if (I[i] + D[i] - 1 > grande) {         grande = I[i] + D[i] - 1;       }     }     for (int i = 1; i <= ctos; i++) {       if (I[i] + D[i] - 1 == grande) {         Z[I[i]]++;       } else {         R[i] = 1;       }     }     for (int i = 1; i <= ctos; i++) {       if (R[i] == 0) {         R[i] = 2;         if (Z[I[i]] == 1) {           R[i] = 3;         }       }       printf( %d , R[i]);     }     printf(  n );     return 0;   }   