DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

Cheaters and Queries

問題に戻る

解説

거짓말쟁이 구간을 [L,R][L,R][L,R]이라 하자. iii번 사람이 거짓말쟁이라는 조건은 i∈[L,R]i \in [L,R]i∈[L,R]이고, iii번 사람의 주장이 참이라는 조건은 [li,ri][l_i,r_i][li​,ri​]가 [L,R][L,R][L,R]과 교차하는 것이다. 두 조건의 참과 거짓은 서로 반대여야 한다.

각 사람에 대해 다음 네 값을 정의한다.

ai=min⁡(i,ri),bi=max⁡(i,li),ci=min⁡(i,li),di=max⁡(i,ri).a_i=\min(i,r_i),\qquad b_i=\max(i,l_i),\qquad c_i=\min(i,l_i),\qquad d_i=\max(i,r_i).ai​=min(i,r

iii번 사람이 구간 안에 있으면서 주장이 참인 경우는 정확히 L≤aiL \leq a_iL≤ai​이고 bi≤Rb_i \leq Rbi​인 경우이다.

iii번 사람이 구간 밖에 있으면서 주장도 거짓인 경우는 다음 세 형태 중 하나이다.

  • R<ciR<c_iR<ci​.
  • di<Ld_i<Ldi​<L.
  • . 마지막 형태는 와 주장 구간이 서로 떨어져 있을 때 그 사이에 거짓말쟁이 구간이 놓이는 경우이다.

따라서 다음 값을 정의한다.

A=min⁡idi,B=max⁡ici,A=\min_i d_i,\qquad B=\max_i c_i,A=imin​di​,B= M(L)=max⁡ai<Lbi,G(L)=min⁡ai≥Lbi.M(L)=\max_{a_i<L} b_i,\qquad G(L)=\min_{a_i\geq L} b_i.M(L)=ai​<Lmax​

M(L)M(L)M(L)의 집합이 비어 있으면 000, G(L)G(L)G(L)의 집합이 비어 있으면 N+1N+1N+1로 정의한다.

구간 [L,R][L,R][L,R]이 정답일 필요충분조건은 다음과 같다.

L≤A,max⁡(B,L,M(L))≤R<G(L).L\leq A,\qquad \max(B,L,M(L))\leq R<G(L).L≤A,max(B,L,M(L))≤R<G(L).

첫 번째 부등식은 모든 di<Ld_i<Ldi​<L 형태를 막는다. R≥BR\geq BR≥B는 모든 R<ciR<c_iR< 형태를 막는다. 는 형태를 막는다. 마지막으로 는 이고 인 사람을 없앤다. 따라서 이 조건들은 위의 모든 모순을 정확히 제거한다.

이제 동적으로 M(L)M(L)M(L)과 G(L)G(L)G(L)을 다룬다. 각 좌표 xxx에 대해 다음 두 값을 유지한다.

hix=max⁡ai=xbi,lox=min⁡ai=xbi.\mathrm{hi}_x=\max_{a_i=x} b_i,\qquad \mathrm{lo}_x=\min_{a_i=x} b_i.hix​=a

그러면 M(L)M(L)M(L)은 hi\mathrm{hi}hi의 접두 최댓값이고, G(L)G(L)G(L)은 lo\mathrm{lo}lo의 접미 최솟값이다. 같은 aia_ia를 가진 여러 사람은 multiset으로 관리한다. 와 도 각각 와 의 multiset으로 관리한다.

좌표 1,2,⋯ ,N1,2,\cdots,N1,2,⋯,N을 크기 약 N\sqrt NN​인 블록으로 나눈다. 블록 안의 각 후보 에 대해 다음 값을 미리 계산한다.

XL=max⁡(L,max⁡s≤x<Lhix),YL=min⁡L≤x≤elox.X_L=\max\left(L,\max_{s\leq x<L}\mathrm{hi}_x\right),\qquad Y_L=\min_{L\leq x\leq e}\mathrm{lo}_x.XL​=max(L,

XLX_LXL​과 YLY_LYL​은 모두 LLL에 대해 감소하지 않는다. 또한 XL<YLX_L<Y_L인 위치들을 따로 저장한다.

현재 블록보다 앞의 hi\mathrm{hi}hi 최댓값을 PPP, 뒤 블록들의 lo\mathrm{lo}lo 최솟값을 SSS라 하자. 이 블록의 후보 LLL이 가능하려면

max⁡(B,P,XL)<min⁡(S,YL)\max(B,P,X_L)<\min(S,Y_L)max(B,P,XL​)<min(S,YL​

이어야 한다. 이는 다음 네 조건과 동치이다.

  • max⁡(B,P)<S\max(B,P)<Smax(B,P)<S.
  • XL<SX_L<SXL​<S.
  • YL>max⁡.

XL,YLX_L,Y_LXL​,YL​이 단조이므로 두 번의 이분 탐색으로 가능한 위치 범위를 구하고, 저장해 둔 XL<YLX_L<Y_LXL​ 위치가 그 범위에 있는지 확인할 수 있다. 찾았다면

R=max⁡(B,P,XL)R=\max(B,P,X_L)R=max(B,P,XL​)

로 두면 된다. L≤AL\leq AL≤A인 후보만 조사한다.

한 번의 주장 변경은 기존 좌표 aia_iai​와 새로운 좌표 aia_iai​가 속한 블록만 바꾼다. 따라서 최대 두 블록을 다시 계산하면 된다.

각 변경의 시간 복잡도는 O(Nlog⁡N)O(\sqrt N\log N)O(N​logN)이고, 전체 메모리 복잡도는 O(N)O(N)O(N)이다.

Solution written by GPT5.6

i​
)
,
bi​
=
max(i,li​),ci​=
min(i,li​),di​=
max(i,ri​).
≤
R
ai<L≤R<bia_i<L \leq R<b_i
ai​<L≤R<bi​
iii
imax​
ci​
,
bi​
,
G
(
L
)
=
ai​≥Lmin​bi​.
c
i​
R≥M(L)R\geq M(L)R≥M(L)
ai<L≤R<bia_i<L \leq R<b_iai​<L≤R<bi​
R<G(L)R<G(L)R<G(L)
L≤aiL\leq a_iL≤ai​
bi≤Rb_i\leq Rbi​≤R
i
​
=
x
max
​
bi​
,
lox​
=
ai​=xmin​bi​.
i​
AAA
BBB
did_idi​
cic_ici​
[s,e][s,e]
[s,e]
LLL
s≤x<L
max
​
hix​
)
,
YL​
=
L≤x≤emin​lox​.
XL​<YL​
)
(B,P)Y_L>\max(B,P)
YL​>max(B,P)
  • XL<YLX_L<Y_LXL​<YL​.
  • <
    YL​