odt tle求调
查看原帖
odt tle求调
966300
Stardust_Mirage楼主2025/7/23 19:08

CF915E

#include<bits/stdc++.h>
#define rint register int
#define itt set<odt>::iterator
using namespace std;
int n,m,cnt;
struct odt{
	int l,r;
	mutable int v;
	bool operator < (const odt &a)const{
		return l<a.l;
	}
	odt(int _l=0,int _r=0,int _v=0):l(_l),r(_r),v(_v){}
};
inline int read(){
	char ch=getchar();int res=0;
	while(!(ch>='0'&&ch<='9'))ch=getchar();
	while(ch>='0'&&ch<='9')res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
	return res;
}
set<odt>t;
inline itt sp(int x){
	itt it =t.lower_bound(odt(x));
	if(it!=t.end()&&it->l==x)return it;
	it--;int l=it->l,r=it->r,v=it->v;
	t.erase(it);t.insert(odt(l,x-1,v));
	return t.insert(odt(x,r,v)).first;
}
inline void ass(int l,int r,int v){
	itt itr=sp(r+1),itl=sp(l);
	t.erase(itl,itr);t.insert(odt(l,r,v));
	return;
}
inline int sum(int l,int r){
	int res=0;
	itt itr=sp(r+1),itl=sp(l);
	for(itt i=itl;i!=itr;i++){
		if(i->v)res+=i->r-i->l+1;
	}
	return res;
}
int main(){
	n=read();m=read();
	t.insert(odt(1,n,1));
	for(rint i=1,op,x,y;i<=m;i++){
		x=read();
		y=read();
		op=read();
		if(op&1)ass(x,y,0);
		else ass(x,y,1);
		printf("%d\n",sum(1,n));
	}
	return  0; 	
}
2025/7/23 19:08
加载中...