func_code_string: #include<bits/stdc++.h>   using namespace std;   #define size(v) (int)v.size()   #define all(v) (v).begin(),(v).end()   using lint = long long;   using fint = long double;   const int INF = 1e9 + 9;   const int MOD = 998244353;      int n, a[200000];      int solve(){       int ret = 0;          // pp...p cc...c       lint psum = 0, sum = accumulate(a,a+n,0ll);       for(int i=0;i<n;++i){           psum += a[i];           if(psum > sum - psum)               ret++;       }          // cc...c pcpc...pc pp...p       //      i         ^ (lower bonud)       auto f = [&](vector<int> a,lint base){           vector<lint> pa, ev, od;           for(int i=0;i<size(a);++i) pa.push_back(a[i]);           for(int i=0;i<size(a)-1;i+=2) ev.push_back(a[i]);           for(int i=1;i<size(a)-1;i+=2) od.push_back(a[i]);           for(int i=1;i<size(pa);++i) pa[i] += pa[i-1];           for(int i=1;i<size(ev);++i) ev[i] += ev[i-1];           for(int i=1;i<size(od);++i) od[i] += od[i-1];           for(int i=0;i<size(a)-1;++i){               vector<lint> &oe = (i&1 ? od : ev);               lint dff = base + pa[size(a)-1] - pa[i] - pa[i];               int cnt = lower_bound(all(oe), oe[i/2] + (dff+1)/2) - lower_bound(all(oe), oe[i/2]);               if(dff > 0) ret = (ret + cnt) % MOD;           }       };          // Case1: cc...c pcpc...pc pp...p       if(1 < n) f(vector<int>(a,a+n), 0);       // Case2: cc...c pcpc...pc pp...p(c)       if(2 < n) f(vector<int>(a,a+n-1), -a[n-1]);       // Case3: (p)ccc...c pcpc...pc pp...p       if(2 < n) f(vector<int>(a+1,a+n), a[0]);       // Case4: (p)ccc...c pcpc...pc pp...p(c)       if(3 < n) f(vector<int>(a+1,a+n-1), a[0]-a[n-1]);          return ret;      }      int main(){       int tc; scanf( %d ,&tc);       while(tc--){           scanf( %d ,&n);           for(int i=0;i<n;++i)               scanf( %d ,a+i);           printf( %d n ,solve());       }   }   