为什么要去重捏,不去重的话答案一样能被统计到吧
另外代码写寄了,如果不是去重问题的话大佬求调
#include <bits/stdc++.h>
#define ll long long
#define pii pair<pair<int,int>,pair<int,int> >
#define mid ((l+r)>>1)
using namespace std;
const int N=200005;
const int INF=0x3f3f3f3f;
inline int rd()
{
int x=0,f=1;
char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())
if(ch=='-') f=0;
for(;ch>='0'&&ch<='9';ch=getchar())
x=(x<<1)+(x<<3)+(ch^48);
return f?x:-x;
}
int n,k;
struct BIT
{
int c[N];
void add(int x,int v)
{
while(x<=k)
{
c[x]+=v;
x+=x&-x;
}
}
int que(int x)
{
int ans=0;
while(x)
{
ans+=c[x];
x-=x&-x;
}
return ans;
}
}t;
pii a[N];
inline bool cmp(pii x,pii y)
{ return x.first.second<y.first.second; }
int ans[N];
int to[N];
void cdq(int l,int r)
{
if(l==r) return;
cdq(l,mid);
cdq(mid+1,r);
sort(a+l,a+mid+1,cmp);
sort(a+mid+1,a+r+1,cmp);
int j=l-1;
for(int i=mid+1;i<=r;i++)
{
while(j<mid&&a[j+1].first.second<=a[i].first.second)
{
j++;
t.add(a[j].second.first,1);
}
ans[a[i].second.second]+=t.que(a[i].second.first);
}
for(int i=l;i<=j;i++)
t.add(a[i].second.first,-1);
}
int main()
{
n=rd(),k=rd();
for(int i=1;i<=n;i++)
{
a[i].first.first=rd();
a[i].first.second=rd();
a[i].second.first=rd();
a[i].second.second=i;
}
sort(a+1,a+n+1);
cdq(1,n);
for(int i=1;i<=n;i++)
to[ans[i]+1]++;
for(int i=1;i<=n;i++)
printf("%d\n",to[i]);
return 0;
}