HDU1166ツリーエントリの配列

/ ** / 
の#include <cstdioを> 
する#include <CStringの> 
する#include <cmath> 
の#include <CCTYPE> 
の#include <iostreamの> 
する#include <アルゴリズム> 
の#include <地図> 
の#include < 設定 > 
の#include <ベクトル> 
#含める < 文字列 > 
の#include <スタック> 
の#include <キュー> 

typedefの長い 長いLLを。
符号なしのtypedef 長い 長いULL。
使用して 名前空間はstdを、

リターン(LL)はsqrt(N)* SQRT(n)の== N; }
 CONST  ダブル PI = ACOS( - 1.0)、ESP = 1E- 10 constの LL INF = 99999999999999 ;
CONST  INT INF = 999999999、N = 5E4 + 24 INT T、N、W、[N]、C [N]。
チャー S [ 6 ]。

INT lowbit(INT X){ リターン(X& - X)。} 

ボイド(追加int型 iは、INT {W)
     しながら(iは= < n)を{ 
        C [I]+ = W。
        I + = lowbit(I)。
    } 
} 

int型の和(int型I){
     int型の和= 0 一方、(I> 0 ){ 
        合計 + = C [i]は、
        I - = lowbit(I)。
    } 
    戻り値の和。
} 

int型のmain()
{ 
    // freopenは( "in.txt"、 "R"、STDIN)。
    // freopenは( "out.txtを"、 "W"、STDOUT)。
    scanf関数(" %のD "、&T)。
    以下のためのint型カセ= 1カセ<= T。加瀬++ ){ 
        scanf関数(" %のD "、&N)
        // のmemset(0、はsizeof A)。memset(C、0、はsizeofのC)。
        以下のためにint型 i = 0 ; iが<= N; iは++)[I] = C [I] = 0 ;
        以下のためにint型私= 1 ; iが<= N; iが++){scanf関数(" %のD "、&W)。(wは、i)を追加します。} 
        のprintf(" ケース%のD:\ n " 、加瀬)。
        // (S [0] == 'E')が続く場合。
        //そうであれば(S [0] == 'A'){
         // }
         // そうであれば(S [0] == 'S')サブ();
        // そうでない場合(S [0] == 'Q')クエリ(); 
        int型のuを、V。
        // getchar関数(); 
        一方、(scanf関数(" %sの"、s)は、strcmpの(S、" 終了")!= 0 ){
             // のprintf( "\ NS =%S \ n"は、単数または複数); 
            scanf関数(" %d個の%d個"、&​​U&V);
            もし(strcmpの(S、" クエリ""和(V) -和(U - 1 ));
             場合(strcmpの(S、" 追加")== 0を加える)(U、V);
             場合(strcmpの(S、" サブ")== 0)追加(U、 - V); 
        } 
    } 

    の戻り 0 ; 
} 
/ * 
    入力:
    出力:
    モデリング:
    方法:
    複雑さ:
    要約:
* /

 

サンプル入力
1 10 1 2 3 4 5 6 7 8 9 10
クエリ1 3
3 6を追加
クエリ2 7
副10 2
6 3を追加
クエリ3 10
終わり
 
サンプル出力
ケース1:
6
33
59

おすすめ

転載: www.cnblogs.com/000what/p/11565881.html