🎯 🎯 🎯
用树状数组动态维护,枚举到当前位置时,ci代表颜色1~i有贡献的颜色对数和
#define int ll
int n;
int c[MAXN];
void update(int x,int v){ while (x <= n) {c[x]+=v; x += (x & (-x)); }}
int que(int x){int sum = 0; while (x) { sum += c[x]; x -= (x & (-x)); }return sum;}
int l[MAXN],r[MAXN],col[MAXN];
int pre[MAXN],lst[MAXN];//前面还有多少同颜色,后面还有多少同颜色
signed main()
{
cin>>n;
rpp(i,n) cin>>col[i]>>l[i]>>r[i];
for(int i=n;i>=1;--i) ++lst[col[i]];
rpp(i,n)
{
update(col[i],-pre[col[i]]);
++pre[col[i]];
cout<<que(r[i])-que(l[i]-1)<<" ";
--lst[col[i]];
update(col[i],lst[col[i]]);
}
cout<<endl;
return 0;
}