AC#1线段树+二分求调
查看原帖
AC#1线段树+二分求调
767449
KukCair楼主2025/1/13 20:09

record

#include <bits/stdc++.h>
#define lowbit(x) x & -x
using namespace std;
using ll = long long;
struct p{
	int l, r, t;
} pt[100005];
int t, n, k, cnt = 1, a[100005], ls[200005], rs[200005], tr[200005], lzy[200005];
void down(int x, int k, int len){
	tr[x] = k * len;
	lzy[x] = k;
}
void pushdown(int x, int l, int r){
	int mid = (l + r) / 2;
	down(ls[x], lzy[x], mid - l + 1);
	down(rs[x], lzy[x], r - mid);
	lzy[x] = 0;
}
void pushup(int x){
	tr[x] = tr[ls[x]] + tr[rs[x]];
}
void build(int x = 1, int L = 1, int R = n){
	if(L == R){
		down(x, 0, 1);
		return;
	}
	int mid = (L + R) / 2;
	ls[x] = ++cnt;
	build(ls[x], L, mid);
	rs[x] = ++cnt;
	build(rs[x], mid + 1, R);
	pushup(x);
}
void change(int a, int l, int r, int x = 1, int L = 1, int R = n){
	if(R < l || L > r) return;
	if(l <= L && R <= r){
		down(x, a, R - L + 1);
		return;
	}
	pushdown(x, L, R);
	int mid = (L + R) / 2;
	change(a, l, r, ls[x], L, mid);
	change(a, l, r, rs[x], mid + 1, R);
	pushup(x);
}
int query(int l, int r, int x = 1, int L = 1, int R = n){
	if(R < l || L > r) return 0;
	if(l <= L && R <= r) return tr[x];
	pushdown(x, L, R);
	int mid = (L + R) / 2;
	return query(l, r, ls[x], L, mid) + query(l, r, rs[x], mid + 1, R);
}
bool cmp(p x, p y){
	return x.r < y.r;
}
int main(){
	cin >> t;
	while(t--){
		cnt = 1;
		cin >> n >> k;
		for(int i = 1; i <= n; i++) cin >> a[i];
		sort(a + 1, a + n + 1);
		build();
		for(int i = 1; i <= k; i++){
			int l, r, t;
			cin >> l >> r >> t;
			l = lower_bound(a + 1, a + n + 1, l) - a;
			r = upper_bound(a + 1, a + n + 1, r) - a - 1;
			pt[i] = {l, r, t};
		}
		sort(pt + 1, pt + k + 1, cmp);
		for(int i = 1; i <= k; i++){
			int l = pt[i].l, r = pt[i].r, t = pt[i].t;
			if(query(l, r) >= t) continue;
			int L = l, R = r - 1;
			while(L < R){
				int mid = (L + R) / 2;
				if(query(l, mid) + r - mid > t) L = mid + 1;
				else R = mid;
			}
			change(1, L + 1, r);
		}
		cout << n - query(1, n) << '\n';
	}
	return 0;
}
/*

3
7 1
8 4 10 1 2 6 7
2 9 3
7 2
8 4 10 1 2 6 7
2 9 3
1 10 1
7 2
8 4 10 1 2 6 7
2 9 3
1 10 4

*/
2025/1/13 20:09
加载中...