调了两天了,要四了,可能还有些问题眼瞎没看出来,玄 2 关
#include <bits/stdc++.h>
#define int long long
#define f(i ,m ,n ,x) for (int i = m ; i <= n ; i += x)
#define f_(i ,m ,n ,x) for (int i = m ; i >= n ; i -= x)
using cint = const int ;
template < typename T > inline void read ( T &x ) {
x = 0 ;
bool flag (0) ; char ch = getchar () ;
while (! isdigit (ch))
{ flag = ch == '-' ; ch = getchar () ;}
while (isdigit (ch))
{ x = (x << 1) + (x << 3) + (ch ^ 48) ; ch = getchar () ;}
flag ? x = - x : 0 ;
} template < typename T ,typename ...Args >
inline void read ( T &x ,Args &...tmp) { read (x) ,read (tmp...) ;}
cint N = 2e5 + 7 ;
int n ,kk ,buc[N] ,same[N] ,ans[N] ;
struct point {
int a ,b ,c ;
bool operator < (const point &cmp) const
{ return a == cmp.a ? b == cmp.b ? c < cmp.c : b < cmp.b : a < cmp.a ;}
bool operator == (const point &cmp) const
{ return a == cmp.a && b == cmp.b && c == cmp.c ;}
} p[N] ;
inline bool cmp (const point & ,const point &) ;
std :: multiset < point > s ;
class BIT {
private :
int v[N] ;
inline int lowbit (cint x) { return x & (- x) ;}
public :
inline void modify (cint x ,cint k)
{ f (i ,x ,kk ,lowbit (i)) v[i] += k ;}
inline int query (cint x) {
int ans = 0 ;
f_ (i ,x ,1 ,lowbit (i)) ans += v[i] ;
return ans ;
}
} bit ;
inline void cdq (cint ,cint) ;
signed main () {
read (n ,kk) ; f (i ,1 ,n ,1) {
int a ,b ,c ; read (a ,b ,c) ;
p[i] = (point) {a ,b ,c} ;
s.insert (p[i]) ;
} int nn = n ;
std :: stable_sort (p + 1 ,p + n + 1) ;
n = std :: unique (p + 1 ,p + n + 1) - p - 1 ;
f (i ,1 ,n ,1)
same[i] = s.count (p[i]) ;
cdq (1 ,n) ;
f (i ,1 ,n ,1)
buc[ans[i] + same[i] - 1] += same[i] ;
f (i ,0 ,nn - 1 ,1)
std :: cout << buc[i] << '\n' ;
return 0 ;
}
inline bool cmp (const point &x ,const point &y)
{ return x.b == y.b ? x.c < y.c : x.b < y.b ;}
inline void cdq (cint l ,cint r) {
if (l == r) return ;
int mid = l + r >> 1 ;
cdq (l ,mid) ,cdq (mid + 1 ,r) ;
int j = l ;
f (i ,mid + 1 ,r ,1) {
while (j <= mid && p[j].b <= p[i].b)
{ bit.modify (p[j].c ,same[j]) ; j ++ ;}
ans[i] += bit.query (p[i].c) ;
}
f (i ,l ,j - 1 ,1)
bit.modify (p[i].c ,- same[i]) ;
return (void) (std :: stable_sort (p + l ,p + r + 1 ,cmp)) ;
}