#include<iostream>
#include<algorithm>
using namespace std;
long long ans=0;
long long qz[20010];
struct bill{
int v,s;
}b[20010],tmp[20010];
bool cmp1(bill &a,bill &b){return a.v<b.v;}
void solve(int l,int r)
{
if(l==r) return ;
int mid=l+r>>1;
solve(l,mid);
solve(mid+1,r);
qz[l-1]=0;
for(int i=l;i<=mid;i++) qz[i]=b[i].s+qz[i-1];
int k=l,LL=l,RR=mid+1;
for(int i=mid+1;i<=r;i++)
{
int L=l,R=mid,MID=l+r>>1;
while(L<R)
{
if(b[MID].s<=b[i].s) L=MID;
else R=MID-1;
MID=L+R+1>>1;
}
if(b[L].s>b[i].s) L--;
ans+=b[i].v*((L-l+1)*b[i].s-qz[L])+b[i].v*(qz[mid]-qz[L]-(mid-L)*b[i].s);
}
while(LL<=mid||RR<=r)
{
if(LL<=mid&&(RR>r||b[LL].s<=b[RR].s)) tmp[k++]=b[LL++];
else tmp[k++]=b[RR++];
}
for(int i=l;i<=r;i++) b[i]=tmp[i];
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) scanf("%d%d",&b[i].v,&b[i].s);
sort(b+1,b+n+1,cmp1);
solve(1,n);
cout<<ans;
}
P2345 [USACO04OPEN]MooFest G
最新推荐文章于 2023-01-11 20:41:04 发布