唐氏弱智儿在线求助
  • 板块学术版
  • 楼主vectorxyz
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/7/5 16:13
  • 上次更新2024/7/5 17:58:03
查看原帖
唐氏弱智儿在线求助
1114241
vectorxyz楼主2024/7/5 16:13

https://jsoi.jzhx.net/question/20220720204

我是唐

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 60005;
int seg_tree[N << 2];
int Lazy[N << 2];
int arr[N];

void push_up (int root) {
    seg_tree[root] = min(seg_tree[root << 1], seg_tree[root << 1 | 1]);
}

void push_down (int root, int L, int R) {
    if(Lazy[root]){
        Lazy[root << 1] += Lazy [root];
        Lazy[root << 1 | 1] += Lazy[root];
        int mid = (L + R) >> 1;
        seg_tree[root << 1] +=  Lazy[root] * (mid - L + 1);
        seg_tree[root << 1 | 1] += Lazy[root] * (R - mid);
        Lazy[root] = 0;
    }
}

void build (int root, int L, int R) {
    Lazy[root] = 0;
    if(L == R) {
        seg_tree[root] = arr[L];
        return ;
    }
    int mid = (L + R) >> 1;
    build(root << 1, L, mid);
    build(root << 1 | 1, mid + 1, R);
    push_up(root);
}


int query (int root, int L, int R, int LL, int RR) {
    if (LL <= L && R <= RR) return seg_tree[root];
    push_down(root, L, R); 
    int Ans = LONG_LONG_MAX;
    int mid = (L + R) >> 1;
    if(LL <= mid) Ans = min(Ans, query(root << 1, L, mid, LL, RR)); 
    if(RR > mid) Ans = min(Ans, query(root << 1 | 1, mid + 1, R, LL, RR)); 
    return Ans;
}

void update(int root, int L, int R, int LL, int RR, int val){
     if (LL <= L && R <= RR) {
         Lazy[root] += val;
         seg_tree[root] += val * (R - L + 1);
        return ;
     }
     push_down(root, L, R);
     int mid = (L + R) >> 1;
     if (LL <= mid) update(root << 1, L, mid, LL, RR, val);
     if (RR > mid) update(root << 1 | 1, mid + 1, R, LL , RR, val);
     push_up(root);
}


signed main()
{
    int n,m, R;
    scanf("%lld%lld%lld",&n,&m,&R);
    for(int i=1;i<=n;++i)
    {
        arr[i] = m;
    }
    build(1,1,n);
    while(R--)
    {
		int l, r;
		cin >> l >> r;
		int N;
		cin >> N;
		r -- ;
//        cout << query(1, 1, n, l, r) << endl;
		if(query(1, 1, n, l, r) >=N){
			puts("YES");
			update(1, 1,n, l, r, -N);
		}
		else puts("NO");
    }
    return 0;
}

2024/7/5 16:13
加载中...