46 lines
1.2 KiB
TypeScript
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);
|