1 solutions

  • 0
    @ 2025-11-5 15:53:51

    C++ :

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    #define MAXN 200000
    #define MAXM 200000
    #define INF 0x3f3f3f3f
    typedef long long int LL;
    
    struct things
    {
        int w,val;
        things(){}
        things(int a,int b):w(a),val(b){}
    
        bool operator < (const things &a)const
        {
            return w>a.w;
        }
    }A[MAXN+10];
    
    int N,M;
    LL S;
    int L[MAXM+10],R[MAXM+10];
    int MinW=INF,MaxW=-INF;
    LL sum[MAXN+10];
    int num[MAXN+10];
    
    LL Gety(int W)
    {
        LL rn=0;
    
        sum[0]=num[0]=0;
        for(int i=1;i<=N;++i)
        {
            num[i]=num[i-1]+(A[i].w>=W);
            sum[i]=sum[i-1]+(A[i].w>=W?A[i].val:0);
        }
    
        for(int i=1;i<=M;++i)
            rn+=(num[R[i]]-num[L[i]-1])*(sum[R[i]]-sum[L[i]-1]);
    
        return rn;
    }
    
    int main()
    {
        //freopen("qc.in","r",stdin);
        //freopen("qc.out","w",stdout);
    
        scanf("%d%d%lld",&N,&M,&S);
        int i,j;
    
        for(i=1;i<=N;++i)
        {
            scanf("%d%d",&A[i].w,&A[i].val);
    
            MinW=min(MinW,A[i].w);
            MaxW=max(MaxW,A[i].w);
        }
    
        for(i=1;i<=M;++i)
            scanf("%d%d",&L[i],&R[i]);
    
        LL maxval=Gety(MinW),minval=Gety(MaxW);
        if(maxval<=S)
        {
            printf("%lld\n",S-maxval);
            return 0;
        }
        if(minval>=S)
        {
            printf("%lld\n",minval-S);
            return 0;
        }
    
        int l=MinW,r=MaxW;//W越大,Y越小
        LL ans=0x3f3f3f3f3f3f3f3fll;
        while(l<r)
        {
            int mid=(l+r)>>1;
            LL val=Gety(mid);
            ans=min(ans,abs(S-val));
    
            if(val<S)r=mid-1;
            else l=mid+1;
        }
    
        ans=min(ans,min(abs(Gety(l)-S),abs(Gety(r)-S)));
        printf("%lld\n",ans);
    
        //fclose(stdin);
        //fclose(stdout);
    }
    
    /*
    5 3 15
    1 5
    2 5
    3 5
    4 5
    5 5
    1 5
    2 4
    3 3
    */
    
    
    • 1

    Information

    ID
    17302
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By