Cod sursă (job #785440)

Utilizator avatar avram.popa Avram-Popa avram.popa IP ascuns
Problemă Ștampile Compilator cpp-32 | 1.52 kb
Rundă Arhiva de probleme Status evaluat
Dată 4 sept. 2024 08:23:38 Scor 10
#include <bits/stdc++.h>
using namespace std;
#define MAXN 200000
int v[MAXN+1],aux[MAXN+1];
vector<pair<int,int>> p[MAXN+1];
priority_queue<pair<int,int>> q;

int main() {
    FILE *fin,*fout;
    int n,m,l,r,k,nrsol,i;
    char ok;
    pair<int,int> vf;
    fin=fopen("stampile.in","r");
    fscanf(fin,"%d%d",&n,&m);
    for(i=0; i<n; i++) {
        fscanf(fin,"%d",&v[i]);
    }
    for(i=0; i<m; i++) {
        fscanf(fin,"%d%d%d",&l,&r,&k);
        p[l-1].push_back({r-1,k});

    }
    nrsol=1;
    ok=1;
    fout=fopen("stampile.out","w");
    i=0;
    while(i<n&&ok) {
        for(pair<int, int>g:p[i]) {
            q.push(g);
        }
        v[i]-=aux[i];
        while(v[i]>0&&!q.empty()) {
            vf=q.top();
            q.pop();
            if(i<=vf.first) {
                if(vf.second<=v[i]) {
                    v[i]-=vf.second;
                    aux[i]+=vf.second;
                    aux[vf.first+1]-=vf.second;
                    nrsol+=vf.second;
                } else {
                    vf.second-=v[i];
                    aux[i]+=v[i];
                    aux[vf.first+1]-=v[i];
                    nrsol+=v[i];
                    v[i]=0;
                    q.push(vf);
                }
            }
        }
        aux[i+1]+=aux[i];
        if(q.empty()&&v[i]>0) {
            ok=0;
        }
        i++;
    }
    if(ok==1) {
        fprintf(fout,"%d",nrsol);
    } else {
        fprintf(fout,"-1");
    }
    fclose(fout);
    return 0;
}