※. a[i] < b[i]가 있으면 no
※. b의 큰수부터 바꿔준다. 더 작다면 큰수로 바꿔도 이후에 다시 바꿀 수 있다.
(a : 3, 3, 3 b = 2,1,2 일 때 전체를 2로 변경 후 중간을 1로 변경해주면 된다.)
※. 배열을 탐색하며 변경해야 하는 수는 스택에 넣어준다. 이 때 스택에 변경해야 하는 수보다 작은 수가 있다면 pop
(전체를 5 3 1 5 로 바꿔야 한다면 5 5 5 5 -> 5 3 3 3 -> 5 3 1 1 -> 1,3 pop -> 5 3 1 5 [5,3,1])
※. a[i]와 b[i]가 같으면 b[i]보다 작은 수만 빼주면 된다.
※. 스택 대신 TreeSet도 가능
(treeset.headSet(b[i]).clear() -> b[i]보다 작은수를 반환 후 전부 제거한다.)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
while(T --> 0) {
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int[] a = new int[n];
int[] b = new int[n];
boolean answer = false;
for(int i = 0; i < n; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < n; i++) {
int x = Integer.parseInt(st.nextToken());
if(a[i] < x) answer = true;
b[i] = x;
}
int m = Integer.parseInt(br.readLine());
HashMap<Integer, Integer> map = new HashMap<>();
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < m; i++) {
int x = Integer.parseInt(st.nextToken());
map.put(x, map.getOrDefault(x, 0)+1);
}
if(answer) sb.append("NO").append('\n');
else {
Stack<Integer> stk = new Stack<>();
for(int i = 0; i < n; i++) {
while(!stk.isEmpty() && stk.peek() < b[i]) stk.pop();
if(a[i] != b[i] && (stk.isEmpty() || stk.peek() != b[i])) {
stk.push(b[i]);
if(!map.containsKey(b[i]) || map.get(b[i]) <= 0) {
answer = true;
break;
}
map.put(b[i], map.get(b[i])-1);
}
}
if(answer) sb.append("NO").append('\n');
else
sb.append("YES").append('\n');
}
}
System.out.println(sb);
}
}
'코드포스' 카테고리의 다른 글
[Codeforces Round 863 (Div. 3)] E. Living Sequence (0) | 2023.04.13 |
---|---|
[Codeforces Round 849 (Div. 4)] D. Distinct Split (0) | 2023.03.13 |
[Codeforces Round #842 (Div. 2)] D. Lucky Permutation (0) | 2023.01.08 |
[Codeforces Round #842 (Div. 2)] B. Quick Sort (0) | 2023.01.06 |
[Hello 2023] C. Least Prefix Sum (0) | 2023.01.05 |