CSP-S2 T4/P7078 贪吃蛇_set 70pts/100pts(O2)

#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
");
			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
",ans-k%2);
	}
	return 0;
}
原文地址:https://www.cnblogs.com/org0/p/13974735.html