[C10_HCM_PTNK_23] Dãy dài nhất

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Pascal, Python

Hải và Nam là đôi bạn thân và đều rất đam mê môn Tin học. Hôm nay Hải nghĩ ra một bài toán mới và đưa ra lời thách đố Nam giải. Bài toán như sau:

Hải cho Nam hai dãy ~a_1, a_2, ..., a_n~ và ~b_1, b_2, ..., b_m~ lần lượt gồm ~n~ và ~m~ số nguyên. Hải yêu cầu Nam lấy một đoạn nào đó các phần tử đầu của dãy ~a~: ~a_1, a_2, ..., a_i~ và ghép với một đoạn cuối nào đó của dãy ~b~: ~b_j, b_{j+1}, ..., b_m~ để nhận được một dãy không giảm:

~a_1 \le a_2 \le ... \le a_i \le b_j \le b_{j+1} \le ... \le b_m~

với số phần tử là lớn nhất.

Yêu cầu

Cho hai dãy ~a~ và ~b~ gồm ~n~ và ~m~ số nguyên, hãy cho biết số phần tử nhiều nhất của dãy mà Nam có thể ghép được.

Dữ liệu đầu vào

Gồm bốn dòng:

  • Dòng đầu chứa số nguyên dương ~n~ ~(1 \le n \le 10^5)~;
  • Dòng thứ hai chứa ~n~ số nguyên ~a_1, a_2, ..., a_n~, mỗi số có giá trị tuyệt đối không quá ~10^9~;
  • Dòng thứ ba chứa số nguyên dương ~m~ ~(1 \le m \le 10^5)~;
  • Dòng cuối chứa ~m~ số nguyên ~b_1, b_2, ..., b_m~, mỗi số có giá trị tuyệt đối không quá ~10^9~.

Dữ liệu đầu ra

Gồm một số nguyên duy nhất là số phần tử nhiều nhất có thể của dãy mà Nam nhận được.

Ràng buộc dữ liệu

  • 50% số điểm của bài tương ứng với các test có ~n, m \le 5000~.
  • 50% số điểm còn lại không có ràng buộc nào thêm.

Ví dụ

Ví dụ 1
INPUT
3
1 4 9
4
5 2 4 5
OUTPUT
4

Giải thích: Nam có thể ghép ~2~ phần tử đầu của dãy ~a~ với hai phần tử cuối của dãy ~b~ để được dãy không giảm gồm ~4~ phần tử: ~1, 4, 4, 5~ hoặc ghép phần tử đầu của dãy ~a~ với ~3~ phần tử cuối của dãy ~b~ để nhận được dãy không giảm cũng gồm ~4~ phần tử: ~1, 2, 4, 5~.


Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.