func_code_string: #include <bits/stdc++.h>   using namespace std;   const long double PI(acos((long double)-1.0));   struct cpx {     long double r, i;     cpx() : r(0), i(0) {}     cpx(long double a, long double b) : r(a), i(b) {}     cpx conj() { return cpx(r, -i); }   } u[20], iu[20], a[524288], b[524288];   cpx operator+(const cpx &l, const cpx &r) { return cpx(l.r + r.r, l.i + r.i); }   cpx operator-(const cpx &l, const cpx &r) { return cpx(l.r - r.r, l.i - r.i); }   cpx operator*(const cpx &l, const cpx &r) {     return cpx(l.r * r.r - l.i * r.i, l.r * r.i + r.r * l.i);   }   void dif(cpx *a, cpx *unt, int l) {     int lv, i, j;     cpx u, v, w;     for (lv = l; lv; --lv)       for (i = 0; i < 1 << l; i += 1 << lv)         for (j = i, w = {1, 0}; j < i + (1 << lv - 1); ++j, w = w * unt[lv]) {           u = a[j];           v = a[j + (1 << lv - 1)];           a[j] = u + v;           a[j + (1 << lv - 1)] = (u - v) * w;         }   }   void dit(cpx *a, cpx *unt, int l) {     int lv, i, j;     cpx u, v, w;     for (lv = 1; lv <= l; ++lv)       for (i = 0; i < 1 << l; i += 1 << lv)         for (j = i, w = {1, 0}; j < i + (1 << lv - 1); ++j, w = w * unt[lv]) {           u = a[j];           v = a[j + (1 << lv - 1)] * w;           a[j] = u + v;           a[j + (1 << lv - 1)] = u - v;         }   }   int main() {     int tn, n, x, i, j, l;     long long a0;     scanf( %d%d , &n, &x);     for (tn = 0, l = -1, a0 = 0, i = 0; i < n; ++i) {       scanf( %d , &j);       if (j < x) {         a0 += (long long)(i - l) * (i - l - 1);         a[++tn].r = i - l;         l = i;       }     }     a0 += (long long)(n - l) * (n - l - 1);     a[++tn].r = n - l;     for (l = 1; 1 << l < tn; ++l)       ;     ++l;     for (i = 1; i < tn; ++i) b[(1 << l) - i].r = a[i].r;     for (i = 1; i <= l; ++i)       iu[i] =           (u[i] = cpx(cos(2 * PI / (1 << i)), -sin(2 * PI / (1 << i)))).conj();     dif(a, u, l);     dif(b, u, l);     for (i = 0; i < 1 << l; ++i) a[i] = a[i] * b[i];     dit(a, iu, l);     long double t((long double)1.0 / (1 << l));     printf( %lld , a0 / 2);     for (i = 1; i < tn && i <= n; ++i)       printf(  %lld , (long long)(a[i].r * t + 0.1));     for (; i <= n; ++i) printf(  0 );     printf(  n );     return 0;   }   