2019年8月5日NOIP 16模擬テストは、要約を反映します

最初のコードを入れていつものように、私は変更することが開始していません...

書式#include <iostreamの> 
の#include <cstdioを>
 使用して 名前空間はstdを、
int型M、Q、KK、VV。
構造体ノード{
     int型K、V。
} [ 200010 ]。
構造体ツリー{
     int型のL、R、和、PI、VI。
} B [ 800010 ]。
INTの作業(INT P、INT V){
     もし、(B [P * 2 + 1 ]、π< V){
         戻り作業(P * 2、VB [P * 2 + 1 ]、π+ B [P * 2 + 1] .vi)。
    } 
    そう であれば(B [P * 2 + 1 ]、π== V){
         戻り B [P] .SUM-B [P * 2 + 1 ] .SUM。
    } 
    {
         戻り B [P] .SUM-B [P * 2 + 1 ] + .SUMワーク(P * 2 + 1 、V)。
    } 
} 
ボイド更新(INT P){
     場合(!B [P * 2 + 1 ] .vi){ 
        B [P] .SUM = [P * B 2 ] .SUM + B [P * 2 + 1] .SUM。
        B [P] .vi = B [P * 2 + 1 ] .vi + B [P * 2 ] .vi。
        B [P]、π = B [P * 2 ] +、πのB [P * 2 + 1 ]、π。
    } 
    そうで あれば(B [P * 2 + 1 ] .vi> = bの[P * 2 ]、π){ 
        B [P] .SUM = [P * B 2 + 1 ] .SUM。
        B [P]、π = B [P * 2 + 1 ]、π。
        B [P] .vi = B [P * 2 + 1 ] .vi-B [P * 2 ] +、πのB [P * 2] .vi。
    } 
    エルス{ 
        B [P] .SUM = [P * B 2 + 1 ] + .SUMワーク(P * 2、B [P * 2 + 1 ] .vi)
        B [P]、π = B [P * 2 + 1 ]、π+ B [P * 2 ]、πのB [P * 2 + 1 ] .vi。
        B [P] .vi = B [P * 2 ] .vi。
    } 
} 
ボイドビルド(もし pが、あなたがしているあなたがR){ 
    B [P]【選択 = L、B [P] .R = R。
    OW(L == R){
        もし(! [L]・K){ 
            B [P] .SUM = [L] .V。
            B [P]、π = 1、B [P] .vi = 0 
        } 
        { 
            B [P] .SUM = 0 
            B [P]、π = 0 
            B [P] .vi = A [L] .V。
        } 
        を返します
    } 
    INT半ば=(L + R)/ 2 
    構築した(p * 2 、L、ミッド)。
    構築した(p * 2 + 1、ミッド+ 1回、r)を、
    の更新(P);
} 
ボイド変化(int型 P、int型の L、int型R){
     場合(L <= bの[P] .L && B [P] .R <= R){
         場合(!KK){ 
            B [P] .SUM = VV。
            B [P]、π = 1、B [P] .vi = 0 
        } 
        { 
            B [P] .SUM = 0 
            B [P]、π = 0 
            B [P] .vi = VV。
        } 
        を返します
    } 
    INT半ば=(B [P] .L + B [P] .R)/ 2 もし(L <= MID)変化(P * 2 、L、R)。
    もし(R> MID)変化(P * 2 + 1 、L、R)。
    更新(P)。
} 
int型のmain()
{ 
//     freopenは( "3.in"、 "R"、STDIN)。
//     freopenは( "3.out"、 "W"、STDOUT)。
    scanf関数(" %dの%のD "、&​​M&Q)。
    int型 I = 1、K、V、iは<= M; iは++ ){ 
        scanf関数(" %d個の%のD "、&を[I]・K、&[I] .V)。1、M)。
    一方、(q-- ){
         int型C。
        scanf関数(" %D%D%D "、&​​C&KK、&VV)。
        変化(1 、C、C)。
        printf(" %Dを\ n "、B [ 1 ] .SUM)。
    } 
    戻り 0 
}
T2

 

おすすめ

転載: www.cnblogs.com/chloris/p/11330881.html