2025-10-12 18:34:22 +09:00

46 lines
1.2 KiB
TypeScript

export {};
type pair = [number, number]; // [value, index]
const input: string[] = require("fs").readFileSync(0).toString().trim().split('\n');
const [N, M]: number[] = [Number(input[0]), Number(input[2])];
let A: number[] = input[1].split(' ').map(Number);
let B: number[] = input[3].split(' ').map(Number);
const comparator = (a: pair, b: pair) => {
if(a[0] === b[0]) return a[1] - b[1];
return b[0]-a[0];
};
let pairA: pair[] = A.map((v,i)=>[v,i]);
let pairB: pair[] = B.map((v,i)=>[v,i]);
pairA.sort(comparator);
pairB.sort(comparator);
let subsequence: number[] = [];
let limitA = -1, limitB = -1;
let idxA = 0, idxB = 0;
while(idxA < N && idxB < M) {
const [valA, posA]: number[] = pairA[idxA];
const [valB, posB]: number[] = pairB[idxB];
if(valA===valB) {
if(posA > limitA && posB > limitB) {
subsequence.push(valA);
limitA = posA;
limitB = posB;
idxA++;
idxB++;
}
else if(posA <= limitA) idxA++;
else idxB++;
}
else if(valA > valB) idxA++;
else idxB++;
}
console.log(subsequence.length);
if (subsequence.length !== 0) console.log(...subsequence);