初始化用 long long 的最大值 9223372036854775807
如果用 int 的最大值 2147483647 只有65分
#include <iostream>
#include <cstdio>
#define LL long long
LL read()
{
LL x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
x=x*10+c-'0';
c=getchar();
}
return f*x;
}
const int N=300000;
LL n,m,s,w[N],v[N],L[N],R[N],l=9223372036854775807,r=0;
LL num[N],sum[N],ans=9223372036854775807,val;
LL max(LL a,LL b)
{
if(a>b) return a;
return b;
}
LL min(LL a,LL b)
{
if(a<b) return a;
return b;
}
LL abs(LL a)
{
if(a>0) return a;
return -a;
}
int main()
{
n=read(); m=read(); s=read();
for(int i=1;i<=n;i++) {
w[i]=read(); v[i]=read();
l=min(l,w[i]); r=max(r,w[i]);
}
for(int i=1;i<=m;i++) {
L[i]=read(); R[i]=read();
}
while(l<=r)
{
LL mid=(l+r)>>1;
num[0]=0; sum[0]=0; val=0;
for(int i=1;i<=n;i++)
{
num[i]=num[i-1];
sum[i]=sum[i-1];
if(w[i]>=mid)
{
num[i]++;
sum[i]+=v[i];
}
}
for(int i=1;i<=m;i++)
val+=(num[R[i]]-num[L[i]-1])*(sum[R[i]]-sum[L[i]-1]);
ans=min(ans,abs(val-s));
if(val>s) l=mid+1;
else r=mid-1;
}
std::cout<<ans;
return 0;
}