90求调,回关
查看原帖
90求调,回关
1813205
chenxuanyuan楼主2025/8/3 16:33
#include <bits/stdc++.h>
using namespace std;
const int N=9e4+50;
long long n,m,a[N],b[N],c[N],lz[N],ans;
bool vis[N];
map<int,int> pos;
void pushdown(int x,int l,int r){
	if(!lz[x])return;
	lz[x*2]=lz[x];
	lz[x*2+1]=lz[x];
	lz[x]=0;
}
void cov(int x,int l,int r,int lp,int rp,int v){
	if(l>rp||r<lp)return;
	if(lp<=l&&r<=rp){
		lz[x]=v;
		return;
	}
	int mid=(l+r)/2;
	pushdown(x,l,r);
	cov(x*2,l,mid,lp,rp,v);
	cov(x*2+1,mid+1,r,lp,rp,v);
}
void calc(int x,int l,int r){
	if(l==r){
		if(lz[x]&&!vis[lz[x]]){
			vis[lz[x]]=true;
			++ans;
		}
		return;
	}
	int mid=(l+r)/2;
	pushdown(x,l,r);
	calc(x*2,l,mid);
	calc(x*2+1,mid+1,r);
}
int main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=m;++i){
		scanf("%lld%lld",&a[i],&b[i]);
		c[i*2-1]=a[i];
		c[i*2]=b[i];
	}
	sort(c+1,c+1+2*m);
	for(int i=1;i<=2*m;++i)
		pos[c[i]]=i;
	for(int i=1;i<=m;++i){
		a[i]=pos[a[i]];
		b[i]=pos[b[i]];
		cov(1,1,2*m,a[i],b[i],i);
	}
	calc(1,1,2*m);
	printf("%lld",ans);
	return 0;
}

2025/8/3 16:33
加载中...