显然,积分大的往后排
c o d e code code
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
long long n, m, t[101000];
struct node
{
long long k, c;
}a[101010];
bool cmp(node x, node y)
{
return x.c<y.c;
}
int main()
{
scanf("%lld", &n);
for(long long i=1; i<=n; i++)
scanf("%lld%lld", &a[i].k, &a[i].c);
scanf("%lld", &m);
for(long long i=1; i<=m; i++)
scanf("%lld", &t[i]);
for(long long i=m; i>=1; i--)
t[i]=t[i]-t[i-1];
t[m+1]=1e18;
sort(a+1, a+1+n, cmp);
long long ans=0;
for(long long i=1, j=1; i<=n; i++)
{
while(a[i].k>t[j])
{
ans+=t[j]*a[i].c*j;
a[i].k-=t[j];
j++;
}
ans+=a[i].c*a[i].k*j;
t[j]-=a[i].k;
}
printf("%lld", ans);
return 0;
}