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

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

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

ABAB

問題に戻る

解説

먼저 값들을 좌표 압축한다. 이후 같은 값인지 여부만 사용하므로 좌표 압축은 답에 영향을 주지 않는다.

각 값 xxx에 대해 다음 두 값을 관리한다.

  • last⁡[x]\operatorname{last}[x]last[x]: 수열 전체에서 xxx가 마지막으로 등장하는 위치.
  • recent⁡[x]\operatorname{recent}[x]recent[x]: 현재 위치보다 앞에서 xxx가 가장 최근에 등장한 위치.

현재 kkk번 위치를 처리하며 x=Akx=A_kx=Ak​라 하자. xxx가 이전에 등장한 위치를 i=recent⁡[x]i=\operatorname{recent}[x]i=라 하면, 다음 조건을 만족하는 값 가 존재할 때 정답은 이다.

i<recent⁡[y]<k<last⁡[y].i<\operatorname{recent}[y]<k<\operatorname{last}[y].i<recent[y]<k<last[y].

실제로 j=recent⁡[y]j=\operatorname{recent}[y]j=recent[y], l=last⁡[y]l=\operatorname{last}[y]l=last[y]로 두면

i<j<k<l,Ai=Ak=x,Aj=Al=yi<j<k<l,\qquad A_i=A_k=x,\qquad A_j=A_l=yi<j<k<l,Ai​=

가 된다. 또한 recent⁡[y]>i=recent⁡[x]\operatorname{recent}[y]>i=\operatorname{recent}[x]recent[y]>i=recent[x]이므로 x≠yx\neq yx=y이다.

따라서 현재 위치보다 뒤에 다시 등장할 값들 중 recent⁡\operatorname{recent}recent가 가장 큰 값을 빠르게 알아내면 된다.

어떤 값 xxx가 ttt번 위치에 등장했고 last⁡[x]>t\operatorname{last}[x]>tlast[x]>t라면, 쌍 (t,x)(t,x)(t,x)를 스택의 뒤에 추가한다. 추가되는 위치 tt는 항상 증가하므로, 유효한 쌍들 가운데 위치가 가장 큰 쌍은 항상 스택의 가장 뒤쪽에 있다.

kkk번 위치를 처리하기 전에 스택의 뒤에서 다음 중 하나를 만족하는 쌍 (t,y)(t,y)(t,y)를 계속 제거한다.

  • recent⁡[y]≠t\operatorname{recent}[y]\neq trecent[y]=t. 이후에 yyy가 다시 등장하여 이 쌍이 오래된 정보가 된 경우이다.
  • last⁡[y]≤k\operatorname{last}[y]\leq klast[y]≤. 가 번 위치보다 뒤에 더 이상 등장하지 않는 경우이다.

제거가 끝난 뒤 스택의 마지막 쌍은, 현재 위치보다 뒤에 다시 등장하는 모든 값 중 가장 큰 최근 등장 위치를 나타낸다. 따라서 xxx가 이전에 등장했고 스택의 마지막 위치가 recent⁡[x]\operatorname{recent}[x]recent[x]보다 크면 YES이다.

이제 이 판정이 모든 가능한 답을 찾음을 보이자. 답이 되는

i<j<k<l,Ai=Ak=x,Aj=Al=yi<j<k<l,\qquad A_i=A_k=x,\qquad A_j=A_l=yi<j<k<l,Ai​=

가 존재한다고 하자. jjj보다 뒤에 처음 등장하는 xxx의 위치를 k′k'k′라 하고, 그 직전 xxx의 등장 위치를 i′i'i라 하자. 그러면

i′≤i<j<k′≤k<li'\leq i<j<k'\leq k<li′≤i<j<k′≤k<

이다. k′k'k′번 위치를 처리할 때 yyy의 최근 등장 위치는 jjj 이상이고, 마지막 등장 위치는 lll 이상이다. 따라서 스택에는 위치가 i′i'i보다 큰 유효한 쌍이 존재하며 알고리즘이 반드시 를 출력한다.

각 쌍은 스택에 한 번 추가되고 한 번만 제거되므로 좌표 압축 이후의 스캔은 O(N)O(N)O(N)이다. 좌표 압축을 포함한 전체 시간 복잡도는 O(Nlog⁡N)O(N\log N)O(NlogN), 공간 복잡도는 O(N)O(N)O(N)이다.

Solution written by GPT5.6

recent[x]
yyy
YES
Ak​
=
x,Aj​=
Al​=
y
t
k
yyy
kkk
Ak​
=
x,Aj​=
Al​=
y
′
l
′
YES