func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 2e5 + 100;   struct node {     int flag, a, b;     long long sum;   } t[maxn * 8];   int a[maxn], cnt[maxn * 2], js[maxn * 2];   void pushdown(int x, int l, int r) {     if (t[x].flag) {       int num = t[x].flag;       t[2 * x].sum += num * l;       t[2 * x + 1].sum += num * r;       t[2 * x].flag += num;       t[2 * x + 1].flag += num;       t[x].flag = 0;     }   }   int ask(int x, int l, int r, int pos) {     int mid;     if (l == r) {       return t[x].sum;     }     mid = (l + r) / 2;     pushdown(x, mid - l + 1, r - mid);     if (pos <= mid)       return ask(2 * x, l, mid, pos);     else       return ask(2 * x + 1, mid + 1, r, pos);   }   void add(int x, int l, int r, int ql, int qr, int val) {     int mid;     if (ql == l && qr == r) {       t[x].flag += val;       t[x].sum += (qr - ql + 1);       return;     }     mid = (l + r) / 2;     pushdown(x, mid - l + 1, r - mid);     if (qr <= mid) {       add(2 * x, l, mid, ql, qr, val);     } else {       if (ql > mid)         add(2 * x + 1, mid + 1, r, ql, qr, val);       else {         add(2 * x, l, mid, ql, mid, val);         add(2 * x + 1, mid + 1, r, mid + 1, qr, val);       }     }     t[x].sum = t[2 * x].sum + t[2 * x + 1].sum;   }   void build(int x, int l, int r) {     int mid;     t[x].flag = 0;     t[x].sum = 0;     if (l == r) {       return;     }     mid = (l + r) / 2;     build(2 * x, l, mid);     build(2 * x + 1, mid + 1, r);   }   int top;   node s[maxn];   int cmp(node a, node b) { return a.sum < b.sum; }   int main() {     node e;     int T, n, flag, ans, k, up;     scanf( %d , &T);     while (T--) {       scanf( %d%d , &n, &k);       for (int i = 1; i <= 2 * k; i++) {         cnt[i] = 0;         js[i] = 0;       }       build(1, 1, k * 2);       for (int i = 1; i <= n; i++) {         scanf( %d , &a[i]);       }       if (n == 2) {         printf( 0 n );         continue;       }       top = 0;       if (n % 2)         up = n / 2 + 1;       else         up = n / 2;       for (int i = 1; i <= up; i++) {         e.a = a[i];         e.b = a[n - i + 1];         if (e.a > e.b) swap(e.a, e.b);         e.sum = e.a + e.b;         s[++top] = e;         js[e.sum]++;       }       sort(s + 1, s + top + 1, cmp);       int last = 0;       ans = n;       for (int i = 1; i <= top; i++) {         e = s[i];         if (e.sum == last) {           add(1, 1, 2 * k, e.a + 1, e.b + k, 1);           continue;         }         cnt[e.sum] += n / 2 - js[e.sum] + i - 1 - ask(1, 1, 2 * k, e.sum);         add(1, 1, 2 * k, e.a + 1, e.b + k, 1);         last = e.sum;       }       for (int i = 1; i <= top / 2; i++) {         swap(s[i], s[top - i + 1]);       }       build(1, 1, k * 2);       last = 0;       ans = n;       for (int i = 1; i <= top; i++) {         e = s[i];         if (e.sum == last) {           add(1, 1, 2 * k, e.a + 1, e.b + k, 1);           continue;         }         cnt[e.sum] += i - 1 - ask(1, 1, 2 * k, e.sum);         ans = min(ans, cnt[e.sum]);         add(1, 1, 2 * k, e.a + 1, e.b + k, 1);         last = e.sum;       }       for (int i = 1; i <= 2 * k; i++) {         if (js[i]) continue;         ans = min(ans, n - ask(1, 1, 2 * k, i));       }       printf( %d n , ans);     }     return 0;   }   