#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using i128=__int128;
using pii = pair<int,int>;
using db = double;
using ldb = long double;
#define int ll
int n=1e5+1;
struct node{
int l,r;
mutable int v;
node(int a,int b,int c):l(a),r(b),v(c){}
bool operator <(const node x)const{return l<x.l;}
};
set<node> odt;
map<int,int> mp;
auto split(int x){
if(x>n) return odt.end();
auto it=--odt.upper_bound(node(x,0,0));
if(it->l==x) return it;
// int l=it->l,r=it->r,v=it->v;
auto [l,r,v]=(*it);
odt.erase(it);
odt.insert(node(l,x-1,v));
return odt.insert(node(x,r,v)).first;
}
void assign(int l,int r,int v){
auto itr=split(r+1),itl=split(l);
odt.erase(itl,itr);//set erase(itl,itr)删除的是[itl,itr)
odt.insert(node(l,r,v));
mp[v]+=(r-l+1);
}
void performance(int l,int r,int v){
auto itr=split(r+1),itl=split(l);
for(auto it=itl;it!=itr;it++){
auto [L,R,V]=(*it);
mp[V]-=(R-L+1);
if(mp[V]==0) mp.erase(V);
}
assign(l,r,v);
}
void solve(){
int q;cin>>q;
odt.insert(node(0,1e5+1,0));
mp[0]=(1e5+2);
while(q--){
int l,r,x;cin>>l>>r>>x;
performance(l,r,x);
cout<<mp.size()<<"\n";
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
int t=1;
// cin>>t;
while(t--) solve();
return 0;
}
例题:牛客周赛95F