POJ3321 Apple Tree (Фенвик дерево)

Наиболее важным является то, ДФС заказать этот титул, прежде, чем был спрос, с которым число узлов, как родительский узел, мы Dfs дерева эта запись узлов и конечных узлов он начал, так долго, как делать между двумя точками Dfs на линии

Во-первых, это не подрывает структуру дерева, а во-вторых, он также отметил, что относительное соотношение между каждым узлом, который является очень распространенным техника Fenwick дерева

Benpian с C ++ потребностей коды для оплаты, если вы хотите использовать г ++, нужно изменить векторный формат немного, я не знаю, принципов конкретных, во всяком случае, каждый раз, когда вопрос оплаты, лучший C ++ креста, особенно POJ машины оценки.

#include <iostream> 
#include <алгоритм> 
#include <cstdio> 
#include <CMATH> 
#include <вектор> 
#include < строка > 
#include <CString> 
#include <карта> 
#include < набор >
 с помощью  пространства имен STD; 
определение типа во долго  долго LL;
Const  INT N = 1e5 + 10 ;
Const  ИНТ инф = 0x3f3f3f3f ;
INT - й [Н];
INT - й изд [N];
INT TR [N];
ИНТпо отношению [N]; 
вектор < INT > мы [N];
ИНТ п;
INT IDX;
недействительным ДФС ( ИНТ и) { 
    IDX ++ ; 
    й [и] = IDX;
    для ( Int I = 0 ; я <м [и] .size (); я ++ ) { 
        ДФС (мо [U] [I]); 
    } 
    Изд [и] = IDX; 
} 
INT lowbit ( INT х) {
     возвращение х & - х; 
} 
Недействительными добавить ( INT х, INT с) {
     INTя;
    для (I = X; I <= N; I + = lowbit (I)) { 
        тр [I] + = с; 
    } 
} 
INT сумма ( INT х) {
     INT I;
    INT Рез = 0 ;
    для (я = х; я; I- = lowbit (я)) { 
        разреш + = тр [I]; 
    } 
    Вернуть Рез; 
} 
INT основных () {
     Int I; 
    CIN >> п;
    для (I = 1 ; я <п; я ++ ) {
         INT U, V; 
        зсапЕ ( "% d% d " , & и, & v); 
        ма [и] .push_back (v); 
    } 
    ДФС ( 1 );
     для (I = 1 ; I <= п; я ++ ) { 
        надстройка (St [I], 1 ); 
        Vis [I] = 1 ; 
    } 
    INT м; 
    CIN >> м;
     в то время как (m-- ) {
         Чара s [N]; 
        зсапЕ ( " % s " , с);
         если (* s == ' C ' ) {
             INT х;
            зсапЕ ( " % d " , & х);
            если ( по отношению [х]) { 
                надстройка (й [х], - 1 ); 
                по отношению [х] = 0 ; 
            } 
            Иначе { 
                добавить (й [х], 1 ); 
                по отношению [х] = 1 ; 
            } 
        } 
        Еще {
             INT х; 
            зсапЕ ( " % d " , & х); 
            Е ( " % d \ п ", сумма (изд [х]) - сумма (й [х] - 1 ));
        } 
    } 
}
Просмотр кода

 

рекомендация

отwww.cnblogs.com/ctyakwf/p/12324130.html