제출 #1330997

#제출 시각아이디문제언어결과실행 시간메모리
1330997boclobanchatSails (IOI07_sails)C++20
45 / 100
16 ms4176 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
long long pref[MAXN],pf[MAXN],val[MAXN],w[MAXN];
pair<int,int> A[MAXN];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    long long s=0;
    for(int i=1;i<=n;i++)
	{
		cin>>A[i].first>>A[i].second;
		pf[A[i].first]--,pf[A[i].first-A[i].second]++;
		pref[A[i].first]--,pref[0]++,s+=A[i].second;
	}
    for(int i=1;i<1e5;i++) pref[i]+=pref[i-1],pf[i]+=pf[i-1];
    int l=0,r=n,pos=0;
    while(l<=r)
    {
    	int mid=(l+r)/2;
    	long long sum=0,mx=0,sv=0;
    	for(int i=1e5;i+1;i--) mx=min(1LL*mid,pref[i]),sv+=pf[i],sv-=min(sv,mx);
    	if(sv==0) r=mid-1;
    	else l=mid+1,pos=mid;
	}
	long long ans=0,mx=0,sv=0,cc=0;
	for(int i=1e5;i+1;i--)
	{
		mx=min(1LL*pos,pref[i]),sv+=pf[i],w[i]=min(sv,mx);
		ans+=w[i]*(w[i]-1)/2,pref[i]-=w[i],sv-=w[i];
	}
	for(int i=0;i<=1e5;i++) if(pref[i]) val[++cc]=w[i];
	sort(val+1,val+cc+1);
	for(int i=1;i<=sv;i++) ans+=val[i];
	cout<<ans;
}
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...