Điểm:
400 (p)
Thời gian:
0.2s
Bộ nhớ:
512M
Input:
bàn phím
Output:
màn hình
Cho một dãy số nguyên gồm \(N\) phần tử \(A[1],A[2],\cdots A[N]\).
Biết rằng dãy con tăng đơn điệu là 1 dãy \(A[i_1],\cdots A[i_k]\) thỏa mãn \(i_1<i_2< \cdots <i_k\) và \(A[i_1]<A[i_2]< \cdots <A[i_k]\).
Yêu cầu: Hãy cho biết dãy con tăng đơn điệu dài nhất của dãy này có bao nhiêu phần tử.
Input
- Dòng đầu tiên chứa số nguyên dương \(N (1 \leq N \leq 30000)\)
- Dòng thứ 2 ghi \(N\) số nguyên \(A[1],A[2],\cdots ,A[N](0 \leq A[i] \leq 1000000)\).
Output
- Ghi ra độ dài của dãy con tăng đơn điệu dài nhất.
Example
Test 1
Input
6
1 2 5 4 6 2
Output
4
Bình luận
Sao bản dễ 1400 điểm mà bản khó có 400 điểm thôi z?
include <bits/stdc++.h>
using namespace std;
int main(){
multiset <int> mulse;
int n, a, m;
cin>>n;
for(int i = 1; i <= n; i++) {
cin>>a;
mulse.insert(a);
auto m=mulse.lower_bound(a);
m++;
if (m!=mulse.end())
mulse.erase(m);
}
cout<<mulse.size();
return 0;
}
Các bạn sẽ không thấy mình AC ở phần danh sách bài nộp đâu vì mình ko thích làm, mình là owner của nick VNOJ này
Đầu tiên nhập vào một số n.
Sau đó nhập n số vào cho hết chúng vào multiset.
Tiếp theo dùng hàm lower_bound() để tìm m là vị trí phần tử đầu tiên trong multiset có giá trị lớn hơn hoặc bằng với giá trị chỉ định.
Rồi kiểm tra xem nều m != multiset.end() thì xoá m đi. Code mẫu (C++) tại đây
Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở.
Bản dễ: 1400p
Bản khó: 400p
perfect
FENWICCK vẫn có thể
tle 4 test khó hiểu
Đã update test (credit: A519LeVanDuc)
Spoiler Alert
Hint 1
Hint 2
Hint 3
Hint 4
Reference AC code | \(O(n\) \(log_2 n)\) time | \(O(n)\) auxiliary space | LIS-problem, DP, Binary_search
Reference AC code | \(O(n\) \(log_2 n)\) time | \(O(n)\) auxiliary space | Online Solving, LIS-problem, DP, Binary_search