P4344 [SHOI2015]脳洞治療機器

トピックリンク:

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
#defineは長い長いっ
 の#define再登録
 の#define PB一back
 の#define Fiの最初
 の#defineが第二SE
 空隙リード(INT
{ = 0int型 D = 1 ; CHAR CH;
    一方、(CH = GETCHAR()、CH> ' 9 ' || CH < ' 0 ' であれば(CH == ' - ' 
            D = - 1 = CH ^ 48 ;
    一方、(CH = GETCHAR()、CH> = ' 0 ' && CH <= ' 9 '  =(<< 3)+(<< 1)+(CH ^ 48 )。* = D; 
} 
構造体メモ
{ 
    INT L、R。
    変更可能なint型のV; 
    音符(INT L、INT R = - 1INT V = 0){L = L、R = R、V = V;}
    ブール 演算子<(CONST注&X)のconst 
    { 
        戻り L < XL。
    } 
}。
セット <ノート> S;
セット <注意> ::イテレータスプリット(INT POS)
{ 
    オートそれは = ()注(POS)s.lower_boundと、
    もし(!それ= s.end()&& IT-> L == POS)を返すことを。
    それは - もし(IT-> R <POS)戻りs.end()。
    int型 L = IT-> L、R = IT-> R、V = IT-> V。
    s.erase(それ)。
    s.insert(音符(L、POS - 、V))。
    リターン 1 s.insert(音符(POS、R、V))Fiの。
} 
ボイド変更(int型 L、int型の R、INT W)
{ 
    オートIT2は、スプリット(R + = 1)、IT1 = スプリット(L)を、
    s.erase(IT1、IT2)。
    s.insert(音符(L、R、W))。
} 
ボイド変化(int型 L、INT R、int型のx、int型のY)
{ 
    int型の和= 0 
    自動IT2 =スプリット(R + 1)、IT1 =スプリット(L)、それ= IT1。
    ために(;!IT1 = IT2、IT1 ++)の合計+ = it1-> V it1-> R-it1-> L +?10 - = it1-> R-it1-> L +; 
    s.erase(それ、IT2)。
    s.insert(音符(L、R、0 ));
    もし(!合計)のリターン; 
    IT2は、スプリット(Y + = 1)、IT1 = スプリット(X)を、
    もし(和> = Y-X + 1 
    { 
        s.erase(IT1、IT2)。
        s.insert(音符(X、Y、1 ))。
        リターン; 
    } 
    のための(; IT1 = IT2;!IT1 ++ 
    { 
        場合(!it1-> V)
        { 
            合計1 もし(合計< 0 
            {
                変更(IT1 - > L、it1-> R +和、1 )。
                休憩; 
            } 
             it1-> V = 1 
        } 
    } 
} 
INT(ASK int型 L、INT R)
{ 
    int型の和= 0、ANS = 0 
    オートIT2 =スプリット(R + 1)、IT1 = スプリット(L)。
    (;!IT1 = IT2、IT1 ++ 
    {
        場合(!it1-> v)の和+ = it1-> R-it1-> L + 1 他の ANS = MAX(合計、ANS)、合計= 0 ;
    } 
    戻り値のMAX(ANS、合計)。
} 
int型のmain()
{ 
    int型N、M。
    READ(n)は、(m)を読み出します。
    s.insert(注(1、nは、1 ))。
    s.insert(ノート(N + 1、N + 10 ))。
    (RE INT iは= 1、OP、L、R、X、Y、I <= M; I ++ 
    { 
        読み取り(OP)。
        場合(OP == 0)(L)を読み取り、(r)を読んで、(L、Rを変更します 0 )。
        そう であれば(OP == 1 )(L)を読み取り、(r)を読み取り、(X)を読み取り、(y)を読んで、変更(L、R、X、Y)。
        (L)を読み取り、(r)を読み取り、のprintf(" %dの\ N " 、(L、R)を尋ねます)。
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/acm1ruoji/p/11865045.html