#include #include #include #include using namespace std; #define lz 2*u,l,mid #define rz 2*u+1,mid+1,r const int maxn=2222; typedef long long lld; int flag[4*maxn]; lld sum1[4*maxn], sum2[4*maxn], sum3[4*maxn]; int X[maxn], Z[maxn]; struct Node { int lx, rx, y, z1, z2, s; Node() {} Node(int lx_, int rx_ , int y_, int zm_, int zl_, int s_) { lx=lx_, rx=rx_, y=y_, z1=zm_, z2=zl_, s=s_; } bool operator<(const Node &S) const { if(y==S.y) return s>S.s; else return y=3) { sum3[u]=sum2[u]=sum1[u]=X[r+1]-X[l]; } else if(flag[u]==2) { sum2[u]=sum1[u]=X[r+1]-X[l]; if(l==r)sum3[u]=0; else sum3[u]=sum1[2*u]+sum1[2*u+1]; } else if(flag[u]==1) { sum1[u]=X[r+1]-X[l]; if(l==r)sum2[u]=sum3[u]=0; else { sum2[u]=sum1[2*u]+sum1[2*u+1]; sum3[u]=sum2[2*u]+sum2[2*u+1]; } } else { if(l==r)sum1[u]=sum2[u]=sum3[u]=0; else { sum1[u]=sum1[2*u]+sum1[2*u+1]; sum2[u]=sum2[2*u]+sum2[2*u+1]; sum3[u]=sum3[2*u]+sum3[2*u+1]; } } } void Update(int u, int l, int r, int tl, int tr, int c) { if(tl>tr) return ; if(tl<=l&&r<=tr) { flag[u]+=c; push_up(u,l,r); return ; } int mid=(l+r)>>1; if(tr<=mid) Update(lz,tl,tr,c); else if(tl>mid) Update(rz,tl,tr,c); else { Update(lz,tl,mid,c); Update(rz,mid+1,tr,c); } push_up(u,l,r); } int find(int tmp, int n) { int l=1, r=n, mid; while(l<=r) { mid=(l+r)>>1; if(X[mid]==tmp) return mid; else if(X[mid]> T; while(T--) { cin >> n ; int num=0; for(int i=0; i