Hỏi về dãy con tăng dài nhất

Cho mình hỏi cách hoạt động của it trong vòng for với ạ

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main() {
    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    vector<int> v;
for (int i = 0; i < n; i++) {
    auto it = lower_bound(v.begin(), v.end(), a[i]);
    if (it != v.end())  *it = a[i];
     else
     v.push_back(a[i]);
}

	cout<<v.size();
}

bạn có thể mô tả bạn đang làm gì và copy code lên thay vì hình ảnh được không? Mình thấy bạn có 1 mảng, và vòng for của bạn để thực thi hàm lower_bound cho từng phần tử trong mảng, biến it để lưu giá trị trả về sau khi chạy hàm.

1 Like

biến it nó lưu trữ sau mỗi vòng lặp à bạn

bạn thử debug ở đây thì sẽ thấy giá trị i và it thay đổi như thế nào sau mỗi vòng lặp, mình thấy it ở đây không có mục đích lưu trữ mà chỉ làm điều kiện để cho hàm push_back chèn giá trị vào vector thôi.

họ gán *it = a[i] làm gì vậy bạn nhỉ

dòng đấy bạn mới thêm hả, vừa nãy mình không thấy, theo mình gán *it = a[i]; ở đây không có tác dụng gì vì vòng for tiếp theo it cũng được gán lại thôi.

Để tối ưu dãy đó.

Vì ô thứ k phải là số bé nhất lập thành dãy tăng có độ dài k+1.

2 Likes

ở cái dùng if kia mình thay *it=a[i] bằng continue nhưng kết quả sai, còn giữ *it=a[i] thì kq đúng

là sao ạ em vẫn chưa hiểu

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?