CSP-S2 T4/P7078 貪吃蛇_set_70pts
阿新 • • 發佈:2020-11-14
#include <bits/stdc++.h> using namespace std; const int mn=1e6+7; int c[mn]; pair<int,int> m1,m2,m3; int main() { /*freopen("snakes.in","r",stdin); freopen("snakes.out","w",stdout);*/ int T;int n; cin>>T; for(int t=1;t<=T;++t) { set< pair<int,int> > a; if(t==1) { scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%d",&c[i]); a.insert(make_pair(c[i],i)); } } else { int m; scanf("%d",&m); for(int i=1;i<=m;++i) { int k,x; scanf("%d%d",&k,&x); c[k]=x; } for(int i=1;i<=n;++i) a.insert(make_pair(c[i],i)); } int cnt=a.size(); int ans=cnt; bool flag=1; for(int i=1;i<cnt-1;++i) { set< pair<int,int> >::iterator mi=a.begin(); set< pair<int,int> >::iterator mi2=mi; ++mi2; set< pair<int,int> >::iterator mx=a.end(); --mx; m1=*mi;m2=*mx; m3=*mi2; if((m2.first-m1.first<m3.first)||(m2.first-m1.first==m3.first&&m2.second<m3.second)) { a.erase(mi);a.erase(mx); a.insert(make_pair(m2.first-m1.first,m2.second)); flag=0; break; } --ans; a.erase(mi);a.erase(mx); a.insert(make_pair(m2.first-m1.first,m2.second)); } if(flag) { printf("1\n"); continue; } cnt=a.size(); int k=0; for(int i=1;i<cnt-1;++i) { set< pair<int,int> >::iterator mi=a.begin(); set< pair<int,int> >::iterator mi2=mi; ++mi2; set< pair<int,int> >::iterator mx=a.end(); --mx; m1=*mi;m2=*mx;m3=*mi2; if((m2.first-m1.first>m3.first)||(m2.first-m1.first==m3.first&&m2.second>m3.second)) break; a.erase(mi);a.erase(mx); a.insert(make_pair(m2.first-m1.first,m2.second)); ++k; } printf("%d\n",ans-k%2); } return 0; }