50 pts 玄2关求调
查看原帖
50 pts 玄2关求调
922679
hongshixiaobai楼主2024/11/9 11:27

RT,思路和第一篇题解差不多

#include<bits/stdc++.h>
using namespace std;
long long t,n,a[1000006],k,x,y,lq1,lq2,i,p,ans,cnt,minn;
struct _{long long v,id;}tmp;
bool operator >(_ x,_ y){if(x.v==y.v)return x.id>y.id;return x.v>y.v;}
bool operator <(_ x,_ y){if(x.v==y.v)return x.id<y.id;return x.v<y.v;}
bool operator >=(_ x,_ y){if(x.v==y.v)return x.id>=y.id;return x.v>=y.v;}
_ operator -(_ x,_ y){return _{x.v-y.v,x.id};}
deque<_>q1,q2;
int main()
{
	freopen("P7078_9.in","r",stdin);
	cin>>t>>n;
	for(i = 1;i<=n;i++)cin>>a[i],q1.push_back({a[i],i});
	tmp = q1.front();
	q1.pop_front();
	if(q1.back()-tmp>=q1.front())
	{
		q2.push_front(q1.back()-tmp);
		q1.pop_back();
		while(q1.size())
		{
			tmp = q1.front();
			q1.pop_front();
			if(max(q1.back(),q2.back())-tmp<q1.front()){q1.push_front(tmp);break;}
			if(q1.back()>q2.back())q2.push_front(q1.back()-tmp),q1.pop_back();
			else q2.push_front(q2.back()-tmp),q2.pop_back();
		}
		ans = q1.size()+q2.size();
		while(q1.size())
		{
			tmp = q1.front();
			q1.pop_front();
			if(q2.empty())
			{
				if(q1.back()-tmp>=q1.front())break;
				q1.push_front(q1.back()-tmp),q1.pop_back();
			}
			else
			{
				if(max(q1.back(),q2.back())-tmp>=q1.front())break;
				if(q1.back()>q2.back())q1.push_front(q1.back()-tmp),q1.pop_back();
				else q1.push_front(q2.back()-tmp),q2.pop_back();
			}
			cnt++;
		}
		if(cnt!=0)
		{
			ans-=cnt;
			if(!(cnt&1))cnt--;
		}
		else if(!(ans&1))cnt--; 
		cout<<ans+cnt<<'\n';
	}
	else
	{
		q1.push_front(tmp);
		ans = q1.size()+q2.size();
		while(q1.size())
		{
			tmp = q1.front();
			q1.pop_front();
			if(q2.empty())
			{
				if(q1.back()-tmp>=q1.front())break;
				q1.push_front(q1.back()-tmp),q1.pop_back();
			}
			else
			{
				if(max(q1.back(),q2.back())-tmp<q1.front()){q1.push_front(tmp);break;}
				if(q1.back()>q2.back())q1.push_front(q1.back()-tmp),q1.pop_back();
				else q1.push_front(q2.back()-tmp),q2.pop_back();
			}
			cnt++;
		}
		if(cnt!=0)
		{
			ans-=cnt;
			if(!(cnt&1))cnt--;
		}
		else if(!(ans&1))cnt--;
		cout<<ans+cnt<<'\n';
	}
	t--;
	while(t--)
	{
		while(q1.size())q1.pop_back();
		while(q2.size())q2.pop_back();
		cnt = 0;ans = 0;
		cin>>k;
		for(i = 1;i<=k;i++)cin>>x>>y,a[x] = y;
		for(i = 1;i<=n;i++)q1.push_back({a[i],i});
		tmp = q1.front();
		q1.pop_front();
		if(q1.back()-tmp>=q1.front())
		{
			q2.push_front(q1.back()-tmp);
			q1.pop_back();
			while(q1.size())
			{
				tmp = q1.front();
				q1.pop_front();
				if(max(q1.back(),q2.back())-tmp<q1.front()){q1.push_front(tmp);break;}
				if(q1.back()>q2.back())q2.push_front(q1.back()-tmp),q1.pop_back();
				else q2.push_front(q2.back()-tmp),q2.pop_back();
			}
			ans = q1.size()+q2.size();
			while(q1.size())
			{
				tmp = q1.front();
				q1.pop_front();
				if(q2.empty())
				{
					if(q1.back()-tmp>=q1.front())break;
					q1.push_front(q1.back()-tmp),q1.pop_back();
				}
				else
				{
					if(max(q1.back(),q2.back())-tmp>=q1.front())break;
					if(q1.back()>q2.back())q1.push_front(q1.back()-tmp),q1.pop_back();
					else q1.push_front(q2.back()-tmp),q2.pop_back();
				}
				cnt++;
			}
			if(cnt!=0)
			{
				ans-=cnt;
				if(!(cnt&1))cnt--;
			}
			else if(!(ans&1))cnt--;
			cout<<ans+cnt<<'\n';
		}
		else
		{
			q1.push_front(tmp);
			ans = q1.size()+q2.size();
			while(q1.size())
			{
				tmp = q1.front();
				q1.pop_front();
				if(q2.empty())
				{
					if(q1.back()-tmp>=q1.front())break;
					q1.push_front(q1.back()-tmp),q1.pop_back();
				}
				else
				{
					if(max(q1.back(),q2.back())-tmp>=q1.front())break;
					if(q1.back()>q2.back())q1.push_front(q1.back()-tmp),q1.pop_back();
					else q1.push_front(q2.back()-tmp),q2.pop_back();
				}
				cnt++;
			}
			if(cnt!=0)
			{
				ans-=cnt;
				if(!(cnt&1))cnt--;
			}
			else if(!(ans&1))cnt--;
			cout<<ans+cnt<<'\n';
		}
	}
}
2024/11/9 11:27
加载中...