#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std ;
#define AddEdge( s , t , d )Add( s , t , d ),Add( t , s , d )
#define MAXN 40010
#define L( t ) left[ t ]
#define K( t ) key[ t ]
#define R( t ) right[ t ]
#define S( t ) size[ t ]
#define MAXV 100100
#define ll long long
struct edge{
edge *next ;
int t , d ;
}*head[ MAXN ];
void Add(int s ,int t ,int d ){
edge *p =new( edge );
p -> t = t , p -> d = d , p -> next = head[ s ];
head[ s ]= p ;
}
int n , w ;
struct SBT{
int left[ MAXV ], right[ MAXV ], key[ MAXV ], size[ MAXV ], V , roof ;
SBT( ){
L(0)=R(0)=K(0)=S(0)=0;
}
void Init( ){
roof = V =0;
}
void update(int t ){
S( t )=S(L( t ))+S(R( t ))+1;
}
void Left(int&t ){
int k =R( t );
R( t )=L( k );update( t );
L( k )=
BZOJ-1468: Tree(树-点分治)
最新推荐文章于 2021-02-03 12:34:39 发布