#ifdef _WIN32 # define LL "%I64d" #else # define LL "%Ld" #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define null NULL #define mp make_pair #define pb(a) push_back(a) #define sz(a) ((int)(a).size()) #define all(a) a.begin() , a.end() #define fi first #define se second #define relaxMin(a , b) (a) = min((a),(b)) #define relaxMax(a , b) (a) = max((a),(b)) #define SQR(a) ((a)*(a)) typedef vector vi; typedef pair pii; typedef long long ll; #define MAX_S 500010 int N , Q , root; vi fo[200010]; // BIT int BIT[MAX_S]; void add(int pos , int w){ ++pos; for(;pos < MAX_S;pos += (pos&(-pos))) BIT[pos] += w; } int get(int pos){ ++pos; int ret = 0; for(;pos>0;pos -= (pos&(-pos))) ret += BIT[pos]; return ret; } int get_interval(int lo , int hi){ if(lo > hi)return 0; if(lo == 0)return get(hi); return get(hi) - get(lo-1); } // // dfs int dpt[200010] , fin[200010] , fout[200010]; vi obh; vi st_vr , st_s; void dfs(){ st_vr.pb(root); st_s.pb(1); dpt[root] = 0; while(!st_vr.empty()){ int vr = st_vr.back(); int st = st_s.back(); if(st == 1){ obh.pb(vr); st_s.back() = -1; for(int i=0;i vq; // Buffers #define BUF_SZ 500010 #define IK 0 vi buf[BUF_SZ]; int main(){ freopen("tree.in" , "r" , stdin); freopen("tree.out" , "w" , stdout); scanf("%d" , &N); for(int i=0;i