[ツリーライン] [テンプレート]の最大範囲P1198 [JSOI2008]最大数を求めます

タイトル説明

今、列の数を維持するためにあなたを要求し、それは、次の2つのアクションを必要とします。

1、クエリ操作。

構文:Q L

機能:現在の数のLの列数の最後にクエリの最大数は、この数の値を出力します。

制限事項:LのLは、現在のシーケンスの長さを超えてはなりません。(L> 0) L > 0

図2に示すように、挿入操作。

構文:A n

関数:N- n型プラスT T、T Tは、最後のクエリ操作に対する回答である(既にクエリ操作を行っていない場合、T = 0 T = 0)、固定定数の結果D 取らD 、列数の末尾に挿入された結果の答えを死にます。

制限:N- nは整数(おそらく負)と全長の範囲です。

注意:列の数は数ではなく、最初は空です。

入出力フォーマット

入力フォーマット:

 

2つの整数の最初の行M M及びD D、M Mは、操作の数を表し(M \ル20万)M 2 0 0 0 0 0 )、D Dは満足、上述(0 < D <2,000,000,000) 0 < D < 2 0 0 0 0 0 0 0 0 0

次のM M行、各行具体的な動作を説明する文字列。構文は、上記のように。

 

出力フォーマット:

 

各クエリについて、あなたは順番に出力し、各結果の行を有効にしてください。

 

トピック要件あまりにもストレートボール

 

#include <ビット/ STDC ++ H>
 の#defineは長い長いllの
 使用 名前空間STDを、
const  int型 MAXN = 2E5 + 5 int型のn; 
LL [MAXN]、D。
構造体ノード
{ 
    int型のL、R。
    LLのID。
} T [MAXN * 4 ]。
ボイドビルド(int型 P、int型の L、INT R)
{ 
    T [P] .L = L、T [P] .R = R。
    もし(L == R)
    { 
        T [P] .ID = [L]。
        リターン
    }
     INT半ば=(L + R)>> 1 
    構築した(p * 2 、L、ミッド)。
    (Pビルド * 2 + 1、ミッド+ 1 、r)を、
    T [P] .ID = maxが(T [P * 2 ] T [P *、.ID 2 + 1 ] .ID)。
} 
ボイド変化(int型 P、INT X、LLのV、INTを L、INT R)
{ 
    場合(L == R)
    { 
        T [P] .ID = V。
        返します
    } 
    int型半ば=(L + R)>> 1 もし(x <= MID)
        変化(のp * 2 、X、V、L、MID)。
    他の
        変化(P * 2 + 1、X、V、中間+ 1 、R)。
    T [P] .ID = maxが(T [P * 2 ] T [P *、.ID 2 + 1 ] .ID)。
} 
(ASK llの整数 L0、INT R0、INT P、INT L、int型R)
{ 
    場合(L <= L0 && R> = R0)
    { 
        戻りT [P] .ID。
    } 
    int型半ば=(L0 + R0)>> 1 
    LLヴァル = - (1 << 30 )。
    場合(中期> = リットル)
        のval = MAX(ヴァル、(L0、ミッド、P *を尋ねる2 、L、R))を、
    もし(MID < R)
        ヴァル = MAX(ヴァル、(MID +尋ねる1、R0、P * 2 + 1 、L、R))を、
    返すのvalを。
} 
int型のmain()
{ 
    scanf関数(" %d個の%のLLD "、&​​N、&D)。
    int型のlen = 0 ; 
    LL T = 0  int型i = 1 ; iは= <N; iは++ 
    { 
        チャーCH。
        LLのx; 
        scanf関数(" %のCの%のLLD "、およびCH、およびX)。
        // coutの<< CH <<」「<< X <<てendl; 
        もし(CH == ' A ' 
        { 
            変化(1、++ LEN、(X + T)%のD、1 、N)
        } 
        
        { 
            場合(X == 0 
                、T = 0 他の
                T =(尋ねる1、、n個、lenの-X + 1 、LEN)。
            printf(" %LLDする\ n " 、T)。
        } 
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/Diliiiii/p/11127632.html