Why WA on #8 ????
查看原帖
Why WA on #8 ????
1359837
Dream_Stars楼主2025/1/22 10:07

rt,nnmm 也没写反啊。

#include <bits/stdc++.h>
using namespace std;

# define int long long
# define up(i ,x ,y) for(int i = x ; i <= y ; i ++)

using namespace std;

inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();return x*f;}
inline void write(int x){if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10|48);}
inline void writeln(int x){write(x),putchar('\n');}
inline void writesp(int x){write(x),putchar(' ');}

const int N = 1e6 + 10;
int R[N] ,n ,m;
bool f;

struct SGT {int l ,r ,mn ,lazy;}tr[N << 2];

inline void pushup (int u){tr[u].mn = min (tr[u << 1].mn ,tr[u << 1 | 1].mn);}

inline void build (int u ,int l ,int r){
  tr[u].l = l ,tr[u].r = r;
  if (l == r) {tr[u].mn = R[l] ; return ;}
  int mid = ((l + r) >> 1);
  build (u << 1 ,l ,mid);
  build (u << 1 | 1 ,mid + 1, r);
  pushup (u);
} inline void pushdown (int u){
  if (tr[u].lazy){
    tr[u << 1].mn += tr[u].lazy ,tr[u << 1 | 1].mn += tr[u].lazy;
    tr[u << 1].lazy += tr[u].lazy ,tr[u << 1 | 1].lazy += tr[u].lazy;
    tr[u].lazy = 0;
  }
} inline void modify (int u ,int L ,int R ,int c){
  int l = tr[u].l ,r = tr[u].r;
  if (l >= L && r <= R) {tr[u].mn += c ,tr[u].lazy += c; return ;}
  pushdown (u);
  int mid = ((l + r) >> 1);
  if (L <= mid) modify (u << 1 ,L ,R ,c);
  if (mid < R) modify (u << 1 | 1 ,L ,R ,c);
  pushup (u);
} inline int query (int u ,int L ,int R){
  int l = tr[u].l ,r = tr[u].r;
  if (l >= L && r <= R) return tr[u].mn;
  pushdown (u);
  int mid = ((l + r) >> 1) ,res = 0;
  if (L <= mid) res = query (u << 1 ,L ,R);
  if (mid < R) res = min (res ,query (u << 1 | 1, L ,R));
  return res;
} signed main(){
  
  n = read () ,m = read ();

  up (i ,1, n) R[i] = read ();
  
  int mns = 1e18;
 // up (i ,524 ,735) mns = min (mns ,R[i]);
 // writeln (mns);

  build (1, 1 ,n);
  
  int record = 0;

  up (i ,1, m){
    int d = read () ,s = read () ,t = read ();
    modify (1 ,s ,t, -d);
    int A = query (1 ,s ,t);
 //  if (i == 1) writeln (A);
    if (A < 0) {f = 0 ,record = i ; break;}
  }
  
  if (f) writeln (0);
  else writeln (-1) ,writeln (record); 
  return 0;
}
2025/1/22 10:07
加载中...