洛谷上数据点全过,牛客网上n≤10的数据点全错,其他测试点全过,洛谷讨论区hack数据全过。求hack,感激不尽。

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int a[N],b[N],g[N],h[N];
int main()
{
int t,n,k,x,y,c,d,e,f,w;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
if(i==1)
{
scanf("%d",&n);
for(int j=1;j<=n;j++)
scanf("%d",&a[j]);
}
else
{
scanf("%d",&k);
for(int j=1;j<=k;j++)
{
scanf("%d%d",&x,&y);
a[x]=y;
}
}
for(int i=1;i<=n;i++)
g[i]=a[i];
w=f=0,e=c=1,d=n;
for(int i=1;i<=n;i++)
h[i]=i;
while(1)
{
if(c>d)
{
c=1,d=0;
for(int i=e;i<=f;i++)
h[++d]=b[i];
e=1,f=0;
}
if(f>=e&&(g[b[e]]>g[h[d]]||(g[b[e]]==g[h[d]]&&b[e]>h[d])))
if(f>=e&&(g[b[f]]<g[h[c]]||(g[b[f]]==g[h[c]]&&b[f]<h[c])))
{
g[b[e]]=g[b[e]]-g[b[f]];
b[f]=b[e++];
}
else
{
g[b[e]]=g[b[e]]-g[h[c++]];
b[++f]=b[e++];
}
else
if(f>=e&&(g[b[f]]<g[h[c]]||(g[b[f]]==g[h[c]]&&b[f]<h[c])))
{
g[h[d]]=g[h[d]]-g[b[f]];
b[f]=h[d--];
}
else
{
g[h[d]]=g[h[d]]-g[h[c++]];
b[++f]=h[d--];
}
if(!w&&(c>d||(f>=e&&(g[b[f]]<g[h[c]]||(b[f]<h[c]&&g[b[f]]==g[h[c]])))))
w=f-e+d-c+2;
if(w)
if(d<c||(f>e&&(g[b[f-1]]<g[h[c]]||(g[b[f-1]]==g[h[c]]&&b[f-1]<h[c]))))
{
if(g[b[f]]==g[b[f-1]]&&b[f]>b[f-1])
{
if((w-f+e-d+c)&1)
printf("%d\n",w+1);
else
printf("%d\n",w);
break;
}
}
else
{
if(g[b[f]]==g[h[c]]&&b[f]>h[c])
{
if((w-f+e-d+c)&1)
printf("%d\n",w+1);
else
printf("%d\n",w);
break;
}
}
if(!(f-e+d-c))
{
if(w&1)
printf("%d\n",w);
else
printf("%d\n",w+1);
break;
}
}
}
}