RT。
WA On #9.
#include<iostream>
#include<cstdio>
#include<queue>
#include<deque>
using namespace std;
const int maxn=1e6+100;
struct snake
{
int bh,sl;
bool operator <(const snake tmp)const
{
return sl<tmp.sl||(sl==tmp.sl&&bh<tmp.bh);
}
snake operator -(const snake tmp)
{
snake ans;
ans.bh=bh;
ans.sl=sl-tmp.sl;
return ans;
}
}sna[maxn];
int n;
deque<snake> q1,q2;
snake find_pop_min()
{
if(q1.empty())
{
snake tmp=q2.front();
q2.pop_front();
return tmp;
}
if(q2.empty())
{
snake tmp=q1.front();
q1.pop_front();
return tmp;
}
if(q1.front()<q2.front())
{
snake tmp=q1.front();
q1.pop_front();return tmp;
}
else
{
snake tmp=q2.front();
q2.pop_front();return tmp;
}
}
snake find_min()
{
if(q1.empty())
{
snake tmp=q2.front();
return tmp;
}
if(q2.empty())
{
snake tmp=q1.front();
return tmp;
}
if(q1.front()<q2.front())
{
return q1.front();
}
else
{
return q2.front();
}
}
snake find_pop_max()
{
if(q1.empty())
{
snake tmp=q2.back();
q2.pop_back();
return tmp;
}
if(q2.empty())
{
snake tmp=q1.back();
q1.pop_back();
return tmp;
}
if(!(q1.back()<q2.back()))
{
snake tmp=q1.back();
q1.pop_back();return tmp;
}
else
{
snake tmp=q2.back();
q2.pop_back();return tmp;
}
}
bool eat()
{
if(q1.size()+q2.size()==1)return false;
snake the_min=find_pop_min(),the_max=find_pop_max();
if(find_min()<(the_max-the_min))
{
q2.push_front(the_max-the_min);
return true;
}
else
{
q2.push_front(the_max-the_min);
return !eat();
}
}
int st()
{
int ans=0;
while(eat())ans++;
return n-ans;
}
int main()
{
//freopen("snakes2.in","r",stdin);
//freopen("snakes2.out","w",stdout);
int t;
cin>>t;
for(int x=1;x<=t;x++)
{
if(x==1)
{
cin>>n;
for(int i=1;i<=n;i++)
{
sna[i].bh=i;
scanf("%d",&sna[i].sl);
}
}
else
{
int k;
cin>>k;
for(int i=1,t1,t2;i<=k;i++)
{
scanf("%d%d",&t1,&t2);
sna[t1].sl=t2;
}
}
q1.clear();
q2.clear();
for(int i=1;i<=n;i++)
{
q1.push_back(sna[i]);
}
cout<<st()<<'\n';
}
return 0;
}