길이 N짜리 정수 배열 A가 있고 Q개의 질문이 들어오는데 각 쿼리에는 l, r, s, e가 주어지고 A[l]...A[r]들 중 s 이상 e 이하의 서로 다른 수의 개수를 세는건데 아무리 생각해도 O(Nsqrt(N)logN)밖에 모르겠다.. 이거 조금 더 빠르게 할 수 있을까
[일반] 이거 어케함
익명(1.233)
2023-01-31 23:10
추천 19
댓글 21
다른 게시글
-
프로그래머스 한번 해보는데 이게 대체 뭐임?? [1][질문] 익명(222.104) | 23.01.31추천 0
-
ps는 풀어도 풀어도 실력이 안느는거 같음 [6][일반] 익명(39.7) | 23.01.31추천 0
-
오늘 usaco 한 사람? [1][일반] 익명(112.152) | 23.01.31추천 0
-
골1이랑 플5 차이가 큰가? [4][일반] 익명(61.101) | 23.01.31추천 0
-
피보나치 수열 Fi에 대해 gcd(Fa,Fb)=Fgcd(a,b) [4][일반] 익명(223.62) | 23.01.31추천 0
-
백준 광고 알고리즘 ㄹㅇ 신기한듯 [2][일반] 익명(118.235) | 23.01.31추천 0
-
백준 문제 푼 지 2시간이 다 되어 가는데 스트릭에 반영이 안되네용 ㅠㅠ [2][일반] 익명(121.174) | 23.01.31추천 0
-
몇천줄되는 깡구현은 진짜 살떨리네 [2][일반] 익명(39.116) | 23.01.31추천 0
-
결국 젤어려운 코딩인터뷰 뚫으려면 퍼플이상은 돼야하잖아 [5][일반] 익명(81u4211vc1kk) | 23.01.31추천 0
-
다익스트라 질문 [9][질문] 익명(118.218) | 23.01.31추천 0
PST 안에 PST 넣으면 안되나
쿼리가 오프라인일거같은데
오프라인 쿼리면 MO's algorithm이라고 해서 nsqrt(n)에 가능함
온라인이면 딱히 생각은 안나는데 pst로도 힘들듯
모스쓴다음에 s이상 e이하인거 찾는게 logn걸리는거 아님?
나도 mo's로 생각했는데 log를 어떻게 떼야할지 모르겠다..
더 줄이긴 힘들거같은데 n x 제한이 몇임?
n, q 둘 다 20만
숫자제한은 10억임?
숫자는 1이상 n 이하
일단 s=1, e=N인 문제는 서로 다른 수와 쿼리 1의 방식으로 O(QlogN+NlogN)에 풀 수 있음 i부터 j까지의 숫자만 본다고 생각해보자. N'=i의 개수 + (i+1)의 개수 + ... + j의 개수, Q'=(s<=i, j<=e)인 쿼리 개수라고 할 때, 위의 방식대로 O(Q'logN'+N'logN')에 위의 문제를 풀 수 있음. 이제 분할정복을 할거임 첨에 dnc(1, N)을 호출해 dnc(i, j)를 할 때는 s<=i<=j<=e인 쿼리에 대해서 서다수쿼를 푼 다음에 s<=i<=j<=e가 아닌 쿼리들에 대해서 dnc(i, mid), dnc(mid+1, j)에 적당히 나눠줌 (mid=(i+j/2) 쿼리는 최대 2logN개의 dnc 함수에서 사용되고 N'의 합은 NlogN으로 bound되서 풀림
대충 O(Qlog^2N+Nlog^2N)에 풀리는 듯
ㄱㅅㄱㅅ
이거 근데 쿼리가 왜 2logN개임? [s=1,e=1] [s=2,e=2], [s=3,e=3] ... [s=n,e=n] 쿼리면 어캄?
세그트리처럼 생각해보면 쿼리 하나당 최대 2logN번만 사용됨
어디 문제임?
백준 문제인데 문제 푸는 과정에서 저것만 해결하면 되가지고
값 변경이 없으면 그냥 머지소트트리 쓰면 됨
어떻게 해?
https://justicehui.github.io/medium-algorithm/2020/02/25/merge-sort-tree/
수열과 쿼리 3에서 서로 다른 수니까 벡터 압축하고 [l, r] 사이인 개수는 (l 이상) - (r+1 이상)으로
아 안되는구나 쿼리 합치기가 어렵네