60WA#1-4求救
查看原帖
60WA#1-4求救
741633
Ryanhao楼主2024/8/8 14:38
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define lch(x) x<<1
#define rch(x) lch(x)|1

int c[20005];
int l[10005],r[10005];

struct node {
	int l,r,a;
}G[100005];

bool vis[20005];

void build(int u, int l, int r) {
	G[u].l = l;
	G[u].r = r;
	if (l == r) {
		G[u].a = 0;
		return;
	}
	int mid = (l+r)/2;
	build(lch(u),l,mid);
	build(rch(u),mid+1,r);
}
void push_down(int u) {
	if (G[u].a != 0) {
		G[lch(u)].a = G[u].a;
		G[rch(u)].a = G[u].a;
		G[u].a = 0;
	}
}
void change(int u, int l, int r, int w) {
	if (l <= G[u].l && G[u].r <= r) {
		G[u].a = w;
		return;
	}
	push_down(u);
	int mid = (G[u].l+G[u].r)/2;
	if (l <= mid) change(lch(u),l,r,w);
	if (r >  mid) change(rch(u),l,r,w);
}
int cnt;
void query(int u) {
	if (G[u].a != 0) {
		if (!vis[G[u].a]) {
			vis[G[u].a] = 1;
			cnt++;
		}
		return; 
	}
	if (G[u].l == G[u].r) return;
	query(lch(u));
	query(rch(u));
}

signed main() {
	int n,m;
	scanf("%lld%lld",&m,&n);
	for (int i = 1; i <= n; i++) {
		scanf("%lld%lld",&l[i],&r[i]);
		c[(i<<1)-1] = l[i];
		c[i<<1] = r[i];
	}
	sort(c+1,c+n*2+1);
	int len = unique(c+1,c+n*2+1)-c-1;
	build(1,1,len);
	for (int i = 1; i <= n; i++) {
		l[i] = lower_bound(c+1,c+len+1,l[i])-c;
		r[i] = lower_bound(c+1,c+len+1,r[i])-c;
	}
	for (int i = 1; i <= n; i++) {
		change(1,l[i],r[i],i);
	}
	cnt = 0;
	query(1);
	printf("%lld\n",cnt);
}
2024/8/8 14:38
加载中...