Э э э. , Удвоение время воспроизведения для двух выписал чек на долгое анти-ошибка. , ,
Мы первая линия бесполезен удалена, а затем для каждого сегмента находятся г, как самый большой и один из его контакта с нижней, а затем ударил достаточно размножаться.
# include <бит / STDC ++. ч> #define LL долго долго #define ЛД длиной двойной #define лный без знака долго долго #define фи первый #define себе второй #define тк make_pair #define ФАПЧ пара <LL, LL> #define PLI пара <LL, Int> #define PII пары <Int, Int> #define SZ (х) ((INT) x.size ()) #define ALL (х) (х) .begin (), (х) .END ( ) #define FIO ИОС :: sync_with_stdio (ложь); cin.tie (0); с помощью пространства имен STD; Const INT N = 5e5 + 7 ; Const ИНТ инф = 0x3f3f3f3f ; Const Л.Л. INF = 0x3f3f3f3f3f3f3f3f ; Const ИНТ мод = 998244353 ; константный двойной EPS = 1e- 8 ; Const двойной PI = ACOS (- 1 ); Шаблон < класс Т, класс S> инлайн пустот Add (T & A, S б) {а + = Ь; если (а> = мод) а - = мод;} шаблон < класс Т, класс S> инлайн пустот к югу (Т & A, S б) {а - = Ь; если (а <0 ) = а + мод;} шаблон < класс Т, класс S> встроенный BOOL chkmax (Т & A, S б) { вернуть а <Ь? а = Ь, верно : ложь ;} шаблон < класс Т, класс S> встроенный BOOL chkmin (Т & A, S б) { вернуть A> B? а = Ь, верно : ложь ;} Int п, т, с [Н]; INT префикс [N]; INT NEX [N] , [ 20 ]; структура линии { INT L, R; BOOL Оператор <( Const линия & RHS) сопзЬ { если (л == rhs.l) возвращение г> rhs.r; вернуться л < rhs.l; } } A [N]; INT основных () { зсапЕ ( " % d% d " , & п, & м); для ( INT I = 1 ; г <= п; я ++) зсапЕ ( " % d% d " , & а [я] .l, & а [я] .r), а [я] .r-- ; рода (а + 1 , а + 1 + N); INT пп = п; п =1 ; для ( INT I = 2 ; я <= пп; я ++ ) , если (а [я] .r> а [п] .r) а [++ п] = A [I]; для ( INT I = 1 ; г <= п; я ++ ) { с [а [я] .l] ++ ; с [а [я] .r + 1 ] - ; } Если (с [! 0 Префикс []) 0 ] = 1 ; для ( INT I = 1 ; г <= 500000 ; я ++ ) { с [я]+ = С [г - 1 ]; если (! с [I]) префикс [I] = 1 ; Префикс [я] + = Префикс [я - 1 ]; } Для ( INT I = 1 , J = 2 ; г <= п; я ++ ) { J = макс (I + 1 , J); в то время как (к <= п && а [J] .l <= а [я] .r + 1 ) j ++ ; NEX [I] [ 0 ] = J - 1 == I? 0 : J - 1 ; } Для ( INT J = 1; J < 20 ; j ++ ) для ( INT I = 1 ; г <= п; я ++ ) NEX [I] [J] = [NEX NEX [I] [J - 1 ]] [J - 1 ]; в то время как (m-- ) { INT х, у; зсапЕ ( " % d% d " , & х, & у); у - ; INT CNT = Префикс [у]; если (х) CNT - = Префикс [х - 1 ]; если (CNT) { пут ( " -1 " ); } Иначе { INT р = lower_bound (а + 1 , а + 1 + п, линия {х + 1 , инф}) - а - 1 ; если (а [р] .r> = у) { пут ( " 1 " ); } Иначе { INT ANS = 0 ; для ( INT I = 19 ; я> = 0 ; i-- ) { если (NEX [P] [I] && а [NEX [P] [I]] г <. у) { р = NEX [P] [I], ANS + = (1 << я); } } Е ( " % d \ п " , ANS + 2 ); } } } Возвращают 0 ; }