func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, c[3010];   struct info {     int x, y;   };   struct as {     int a, b, c;   } ans;   struct node {     int x, id;   } a[3010];   inline bool cmp(node a, node b) { return a.x > b.x; }   inline info max(info a, info b) {     if (a.x < b.x) return b;     return a;   }   struct seg {     int lt[12010], rt[12010];     info mx[12010];     inline void build(int i, int l, int r) {       lt[i] = l;       rt[i] = r;       if (l == r) {         mx[i] = (info){a[l].x - a[l + 1].x, l};         return;       }       int mid = l + r >> 1;       build(i * 2, l, mid);       build(i * 2 + 1, mid + 1, r);       mx[i] = max(mx[i * 2], mx[i * 2 + 1]);     }     inline info query(int i, int l, int r) {       if (l <= lt[i] && r >= rt[i]) return mx[i];       int mid = lt[i] + rt[i] >> 1;       info ans = {-1, 0};       if (l <= mid) ans = query(i * 2, l, r);       if (r > mid) ans = max(ans, query(i * 2 + 1, l, r));       return ans;     }   } A;   inline as max(as t1, as t2) {     if (t1.a == 0) return t2;     if (a[t1.a].x - a[t1.a + 1].x != a[t2.a].x - a[t2.a + 1].x)       return a[t1.a].x - a[t1.a + 1].x > a[t2.a].x - a[t2.a + 1].x ? t1 : t2;     if (a[t1.b].x - a[t1.b + 1].x != a[t2.b].x - a[t2.b + 1].x)       return a[t1.b].x - a[t1.b + 1].x > a[t2.b].x - a[t2.b + 1].x ? t1 : t2;     if (a[t1.c].x - a[t1.c + 1].x != a[t2.c].x - a[t2.c + 1].x)       return a[t1.c].x - a[t1.c + 1].x > a[t2.c].x - a[t2.c + 1].x ? t1 : t2;   }   int main() {     cin >> n;     for (int i = 1; i <= n; i++) scanf( %d , &a[i].x), a[i].id = i;     sort(a + 1, a + n + 1, cmp);     A.build(1, 1, n);     for (int i = 1; i <= n; i++)       for (int j = i + 1; j < n; j++)         if (2 * (j - i) >= i && i * 2 >= j - i) {           int lk = max(j + (max(i, j - i) + 1) / 2, j + 1),               rk = min(j + 2 * min(i, j - i), n);           if (lk <= rk) ans = max(ans, (as){i, j, A.query(1, lk, rk).y});         }     for (int i = 1; i <= ans.a; i++) c[a[i].id] = 1;     for (int i = ans.a + 1; i <= ans.b; i++) c[a[i].id] = 2;     for (int i = ans.b + 1; i <= ans.c; i++) c[a[i].id] = 3;     for (int i = ans.c + 1; i <= n; i++) c[a[i].id] = -1;     for (int i = 1; i <= n; i++) printf( %d  , c[i]);     return 0;   }   