想的是zkw,区间修改+区间最小值,只有1,2,3,7,8,21过了
#include<bits/stdc++.h>
using namespace std;
namespace hw {
const int MAXN=1e6+5;
int n,m,r[MAXN],N;
struct node {
int val,f;
}seg[MAXN<<2];
void pushup(int now) {
seg[now].val=min(seg[now<<1].val+seg[now<<1].f,seg[now<<1|1].val+seg[now<<1|1].f);
}
void Build() {
N=log2(n)+1;
N=1<<N;
seg[N].val=1e9+5;
for (int i=1;i<=n;i++) {
seg[N+i].val=r[i];
}
for (int i=n+1;i<=N;i++) {
seg[N+i].val=1e9+5;
}
for (int i=N-1;i>=1;i--) {
pushup(i);
}
}
int Query(int s,int t) {
s+=N,t+=N;
int sans=seg[s].val,tans=seg[t].val;
if (s==t) {
for (;s;s>>=1) sans+=seg[s].f;
return sans;
}
for (;s^t^1;s>>=1,t>>=1) {
// printf("%d %d ",s,t);
sans+=seg[s].f;
tans+=seg[t].f;
if (~s&1) {
sans=min(sans,seg[s^1].val+seg[s^1].f);
}
if (t&1) {
tans=min(tans,seg[t^1].val+seg[t^1].f);
}
// printf("%d %d\n",sans,tans);
}
// printf("%d %d\n",s,t);
sans=min(sans,tans);
for (;s;s>>=1) {
// printf("%d %d\n",seg[s].f,sans);
sans+=seg[s].f;
}
return sans;
}
void Modify(int s,int t,int val) {
s+=N-1,t+=N+1;
for (;s^t^1;s>>=1,t>>=1) {
// printf("%d %d\n",s,t);
if (~s&1) {
seg[s^1].f+=val;
}
if (t&1) {
seg[t^1].f+=val;
}
if (s<N) pushup(s);
if (t<N) pushup(t);
}
for (;s;s>>=1) pushup(s);
}
void out() {
for (int i=1;i<=N;i++) {
// printf("%d : %d\n",i,Query(i,i));
printf("%d : %d %d\n",i,seg[N+i-1].val,seg[N+i-1].f);
}
printf("\n");
}
int main() {
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) {
scanf("%d",&r[i]);
}
Build();
// out();
int d,s,t;
for (int i=1;i<=m;i++) {
scanf("%d%d%d",&d,&s,&t);
// printf("Q%d : %d\n",i,Query(s,t));
if (Query(s,t)<d) {
printf("-1\n%d",i);
return 0;
}
Modify(s,t,-d);
// out();
}
printf("0");
return 0;
}
}
int main() {
// freopen("P1083_4.in","r",stdin);
hw::main();
return 0;
}
/*
10 10
225657656 994645291 999202796 999202796 999202796 942745784 962612348 842542128 73554493 491166
768987635 2 8
223039613 1 5
169200644 6 7
4066339 3 9
52812425 7 9
16184563 7 9
44670 3 10
2618043 1 5
4032936 7 7
446496 3 10
-1
5
10 10
225657656 994645291 999202796 999202796 999202796 942745784 962612348 842542128 73554493 491166
768987635 2 8
223039613 1 5
169200644 6 7
4066339 3 9
52812425 7 9
16184563 7 9
44670 3 10
2618043 1 5
4032936 7 7
446496 3 10
-1
5
10 10
42323424 633675939 990396626 965164370 965164370 965164370 972489810 619351082 619351082 0
586780256 2 9
316471206 3 7
42323424 1 3
8081621 3 9
36667522 3 7
110729 3 6
4572259 2 9
7436169 7 9
3834281 3 9
8646496 4 9
-1
6
4 3
2 5 4 3
2 1 3
3 2 4
4 2 4
*/