제출 #1345622

#제출 시각아이디문제언어결과실행 시간메모리
1345622Faisal_SaqibPotatoes and fertilizers (LMIO19_bulves)C++20
34 / 100
47 ms19956 KiB
#include <iostream>
using namespace std;
const int N=1e6+10;
typedef long long ll;
ll p1[N],p2[N],b2[N],b1[N];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin>>n;
	int a[n],b[n];
	ll A=0,B=0;
	for(int i=0;i<n;i++)
	{
		cin>>a[i]>>b[i];
		A+=a[i];
		B+=b[i];
	}
	while(A!=B)
	{
		long long bal=0;
		for(int i=0;i<n;i++)
		{
			bal+=b[i];
			bal-=a[i];
			b1[i]=bal;
		}
		for(int i=n-1;i>=0;i--)
			p1[i]=p1[i+1]+(b1[i]<0);
		bal=0;
		for(int i=n-1;i>=0;i--)
		{
			bal+=b[i];
			bal-=a[i];
			b2[i]=bal;
		}
		for(int i=0;i<n;i++)
		{
			p2[i]=0;
			if(i)p2[i]=p2[i-1];
			p2[i]+=(b2[i]<0);
		}
		pair<ll,ll> og={-1,-1};
		for(int i=0;i<n;i++)og=max(og,{p2[i]+p1[i],i});
		a[og.second]--;
		// cout<<"decrement at "<<og.second<<endl;
		A--;
	}
	long long bal=0,fnl=0;
	for(int i=0;i<n;i++)
	{
		bal+=b[i];
		bal-=a[i];
		fnl+=max(0ll,-bal);
		// cout<<bal<<' ';
	}
	for(int i=n-1;i>=0;i--)
	{
		bal+=b[i];
		bal-=a[i];
		fnl+=max(0ll,-bal);
		// cout<<bal<<' ';
	}
	
	cout<<fnl<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...