ODTのテンプレート

 構造体ノード{
    int型のL、R。
   変更可能なint型のV; 
   ノード(int型 L、INT R、int型V):L(L)、R(R)、V(V){} 
   インラインブール 演算子 <(constのノード&B)のconst {
        戻り L < BL。
   } 
}。
セット <ノード> S。
typedefの設定 <ノードは> :: ITイテレータ。
int型ANS; 
ITは、(分割インラインint型POS)を{ 
   ITが s.lower_bound(ノード(POS、POS = 0 ))。
   IF(!ITはs.end()&& IT-> L POSは== =)を返す;それを
    - それを
    INT L = IT-> L、R&LT IT- => R&LT = V IT-> V。
   S. ERASE(IT); 
   s.insert(ノード(L、POS - 。1 、V));
    リターン。s.insert(ノード(POSは、R、V))まず; 
} 
インライン無効に割り当てる(int型 Lを、INT R&LT、INT V){
     /// ノートは最初の分割は、右から分割し始めなければならない
     /// Rを見つけられない原因は、分割を開始するために放置した場合、同じLとRの時間、R範囲+ 1がオフに分割するためREで得
     /// が、右への最初の分割は、IT2がIT1離脱しないであろう 
    ITはIT2 =スプリット(R + 1)、IT1 = スプリット(L)を、
    IT IT =IT1;
    (;それ= IT2;!++ IT){ 
        ANS - = IT-> V *(IT-> R - IT-> L + 1 )。
    } 
    s.erase(IT1、IT2)。
    ANS + =(R-L + 1)* V。
    s.insert(ノード(L、R、V))。
}

 

おすすめ

転載: www.cnblogs.com/bluefly-hrbust/p/11495196.html