50wa求调
查看原帖
50wa求调
705012
Miss_SGT楼主2023/5/3 00:18
#include<bits/stdc++.h>
using namespace std;
int n,m,c[10000005][2];
struct cz{int x,f,v;}e[200005]; 
int t[400005];
bool cmp(cz a,cz b){return a.v<b.v;}
inline void down(int p){
	if(t[p]){
		t[2*p]=t[2*p+1]=t[p];
		t[p]=0;
	}
}
void change(int p,int lt,int rt,int l,int r,int vs){
	if(l<=lt&&rt<=r){
		t[p]=vs;
		return;
	}int mid=(lt+rt)>>1;
	down(p);
	if(l<=mid) change(2*p,lt,mid,l,r,vs);
	if(mid+1<=r) change(2*p+1,mid+1,rt,l,r,vs);
}
int get(int p,int lt,int rt,int x){
	if(lt==rt) return t[p];
	down(p);
	int mid=(lt+rt)>>1;
	if(x<=mid) return get(2*p,lt,mid,x);
	return get(2*p+1,mid+1,rt,x);
}int col,ans;
bool vis[100005]={1,0};
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		scanf("%d%d",&e[i].v,&e[i+m].v);
		e[i].x=e[i+m].x=i;
		e[i].f=0;
		e[i+m].f=1;
	}n=1;
	sort(e+1,e+m*2+1,cmp);
	for(int i=1;i<=m*2;i++){
		if(e[i].v!=e[i-1].v) n+=2;
		c[e[i].x][e[i].f]=n;
	}
	for(int i=1;i<=m;i++)
		change(1,1,n,c[i][0],c[i][1],i);
	for(int i=1;i<=n;i++){
		col=get(1,1,n,i);
		if(!vis[col]){
			vis[col]=1;
			ans++;
		}
	}printf("%d",ans);
	return 0;
}

2023/5/3 00:18
加载中...