Cod sursa(job #3320721)

Utilizator novak1snovac luca novak1s Data 7 noiembrie 2025 09:35:41
Problema Deque Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.84 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;
int x[100005],y[100005],z[100005],sum[100005];
priority_queue<pair<int,int>>q;
signed main()
{
    int n;
    cin >>n;
    int k;
    cin >>k;
    int arie=0;
    for( int i=1; i<=n;i++){
        cin >> x[i] >> y[i];
    }
    for ( int i=1; i<=n;i++){
        cin >>z[i];
    }
        for ( int i=1;i<=n;i++){
        if(i==1){
            sum[i]=x[i+1]-x[i];
//            cout << sum[i] << x[i+1] << x[i] << " ";
            q.push({sum[i],i});

        }
        else if(i==n){
            sum[i]=x[i]-x[i-1];
//            cout << sum[i] << x[i] << x[i-1] << " ";
            q.push({sum[i],i});
        }
        else
        {

            sum[i]=x[i+1]-x[i-1];
//            cout << sum[i] << x[i+1] << x[i-1] << " ";
            q.push({sum[i],i});
        }


    }
//    while(!q.empty()){
//        cout << q.top().first << " " << q.top().second  << '\n';
//        q.pop();
//    }


            while(!q.empty() && k>0){
                while(z[q.top().second]!=0 && k>0){
                    if(k-z[q.top().second]>0)
                    {
                        y[q.top().second]+=z[q.top().second];
                        k-=z[q.top().second];
                    }
                    else{
                        y[q.top().second]+=k;
                        k=0;
                    }

                    z[q.top().second]=0;
                }

                q.pop();
            }
    for( int i=1;i<=n;i++){
        if(i==1){
            arie+=y[i]*(x[i+1]-x[i]);


        }
        else if(i==n){
            arie+=y[i]*(x[i]-x[i-1]);

        }
        else
        {
            arie+=y[i]*(x[i+1]-x[i-1]);
        }
    }
    if(arie%2==0)
    cout <<arie/2 <<".0";
    else cout << arie/2 << ".5";
}