Pagini recente »
Borderou de evaluare (job #675087)
|
Cod sursă (job #800081)
|
Istoria paginii utilizator/carmenminca
|
Istoria paginii utilizator/flaviadogaru
|
Cod sursă (job #769491)
Cod sursă (job
#769491)
#include <bits/stdc++.h>
// THE DENIZ BRAVEN - CANADA - USA - ARGENTINA - BRAZIL
using namespace std;
#define task "test"
const int N=1e5+1;
#define int long long
int n,m,z[N+10];
vector<pair<int,int>> ds[N+10];
int d[N+10];
void giai()
{
cin >> n >> m;
for(int i=1;i<=n;i++) cin >> z[i];
for(int i=1;i<=m;i++)
{
int l,r,k;
cin >> l >> r >> k;
ds[l].push_back({r,k});
}
priority_queue<pair<int,int>> pq;
int dmg=0,ans=0;
for(int i=1;i<=n;i++)
{
dmg-=d[i];
z[i]-=dmg;
for(pair<int,int>x: ds[i]) pq.push(x);
while(z[i]>0)
{
if(pq.empty())
{
ans=-1;
break;
}
int j=pq.top().first;
int k=pq.top().second;
if(j<i)
{
ans=-1;
break;
}
pq.pop();
int dd=min(k,z[i]);
z[i]-=dd;
k-=dd;
ans+=dd;
d[j+1]+=dd;
dmg+=dd;
if(k) pq.push({j,k});
}
if(ans==-1) break;
}
if(ans==-1)
{
cout << -1<< '\n';
}
else cout << ans << '\n';
for(int i=1;i<=n+1;i++) ds[i].clear(),d[i]=0;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// if (fopen(task".inp","r"))
// {
freopen(task"stampile.in","r",stdin);
freopen(task"stampile.out","w",stdout);
// }
int t;
// cin >> t;
t=1;
while(t>0)
{
giai();
t--;
}
}