1 条题解

  • 0
    @ 2024-7-26 10:11:06
    #include <iostream>
    #include <cmath>
    #include <cstring>
    using namespace std;
    
    long long w[1000010],v[1000010],n,m,S,res,s1[1000010],s2[1000010],l[1000010],r[1000010];
    long long calc(int x)
    {
    	cerr<<x<<endl;
    	memset(s1,0,sizeof(s1)),memset(s2,0,sizeof(s2));
    	for(int i=1;i<=n;i++)
    	{
    		s1[i]=s1[i-1],s2[i]=s2[i-1];
    		if(w[i]>=x)s1[i]++,s2[i]+=v[i];
    	}
    	for(int i=1;i<=m;i++)
    	{
    		res+=(s1[r[i]]-s1[l[i]-1])*(s2[r[i]]-s2[l[i]-1]);
    	}
    	return res;
    }
    int main()
    {
            ios::sync_with_stdio(false);
    	cin>>n>>m>>S;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>w[i]>>v[i];
    	}
    	for(int i=1;i<=m;i++)
    	{
    		cin>>l[i]>>r[i];
    	}
    	long long l=0,r=1e6,ans=0x3f3f3f3f3f3f3f3f;
    	while(l<=r)
    	{
    		long long mid=(l+r)/2;
    		if(abs(calc(mid)-S)<ans)ans=abs(res-S);
    		if(res<S)r=mid-1;
    		else l=mid+1;
    		res=0;
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    
    • 1

    信息

    ID
    1670
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    25
    已通过
    4
    上传者