[National Team] количество цветов очереди / Maintenance (с Мо ремонтной бригады)

Значение вопросов:

       Для заданной последовательности, запрос ответа м, В: г л и задать различное количество цветов, R: индекс х к у цвета

Решение:

       Ремонт команда с Мо, Мо относительно обычной команды, хочет добавить рейтинг ключевых слов

# include <бит / STDC ++ ч.> 
#define Num CH-'0' 
#define р putchar ( '\ п') с 
помощью патезрасе; 
Шаблон <Ьурепате T> 
недействительными чтения (Т & разреш) { 
    BOOL флаг = ложь; символ ч; 
    в то время как (ч == '-') && (флаг = истина) (isdigit (ч = GetChar (!))); 
    для (Рез = Num; isdigit (CH = GetChar ()); разреш = разреш * 10 + Num); 
    Флаг && (Рез = -res); 
} 
Шаблон <Ьурепате T> 
недействительными записи (Т х) { 
    если (х <0) putchar ( '-'), х = -x; 
    если (х> 9) записи (х / 10); 
    putchar (х +% 10 '0'); 
} 
Const INT maxn = 50010; 
Const INT М = 50010; 
Int N, м; 
INT qu_num, op_num; 
INT LST [maxn], цв [maxn], Л [maxn], CNT [1000010], разреш [M]; 
структура запроса {
    INT л, г, т, позы;
    BOOL оператор <(Const запроса & а) константные { 
        возврата BLO [Al] == BLO [л] (BLO [ар] == BLO [г] т < по адресу: BLO [г] <BLO [ар]): BLO [л] <BLO [Al]; 
    } 
} Qu [М]; 
Опер структура { 
    INT х, LST, теперь; 
} оп [М]; 
INT основных () 
{ 
    чтение (N), чтение (м); 
    INT д = пау (п, 0,666666); 
    для (INT = 1; г <= п; я ++) 
        следующим образом (столбец [I]), BLO [I] = (I-1) / д + 1, LST [я] = Col [I]; 
    ИНТ х, у; 
    для (INT I = 1; I <= т; я ++) { 
        обугленной ч [5]; 
        зсапЕ ( "% s", ч); 
        зсапЕ ( "% d% d", & х, & у); 
        если (ч [0] == 'Q') 
            оп [++ op_num] .x = х, оп [op_num] .lst = LST [х], оп [op_num] .now = у, LST [х] = у; 
            Qu [++ qu_num] .L = х, Qu [qu_num] .r = у, Qu [Qu [qu_num] .pos = qu_num].
        еще 
    вроде (Цюй + 1, Цюй + 1 + qu_num); 
    INT л = 0, г = 0, т = 0, ANS = 0; 
    для (INT = 1; я <= qu_num; я ++) { в 
        то время (т <Qu [I] .t) { 
            т ++; ///最初的т = 0,先增 , 
            если (л <= оп [т] .x && оп [т] .x <= г) { 
                если (! - CNT [Col [оп [т] .x]]) ans--; 
                если (CNT [оп [т] .now] ++!) анс ++; 
            } 
            Col [оп [т] .x] = оп [т] .now; 
        } В 
        то время (т> Qu [I] .t) { 
            если (л <= оп [т] .x && оп [т] .x <= г) { 
                если (! - CNT [Col [оп [т] .x] ]) ans--; 
                если (CNT [оп [т] .lst] ++!) анс ++; 
            } 
            Col [оп [т] .x] = оп [т] .lst; 
            T--;
        в то время как (г <Qu [я] .r) , если ANS ++ (CNT [Col [++ г]] ++!); 
        в то время как (л> Цюй [я] .l) , если (CNT [цв [- л]] ++!) анс ++; 
        в то время как (г> Qu [I] .r) , если (- CNT [Col [r--]]!) ans--; 
        в то время как (л <Цюй [я] .l) , если (- CNT [цв [л ++]]!) ans--; 
        разреш [Qu [I] .pos] = анс; 
    } 
    Для (INT = 1; я <= qu_num; я ++) 
        записи (разреш [I]), р; 
    возвращать 0; 
}

  

рекомендация

отwww.cnblogs.com/wuliking/p/11201738.html