CSES - Nearest Smaller Values | Giá trị nhỏ hơn gần nhất

Xem PDF

Điểm: 1100 Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Cho một mảng gồm \(n\) số nguyên, nhiệm vụ của bạn là với mỗi vị trí của mảng, tìm vị trí gần nhất bên trái của nó mà có giá trị nhỏ hơn.

Input

  • Dòng đầu vào đầu tiên có một số nguyên \(n\): kích thước của mảng.
  • Dòng thứ hai có n số nguyên \(x_1,x_2,\ldots,x_n\): các giá trị của mảng.

Output

  • In \(n\) số nguyên: vị trí gần nhất nhỏ hơn cho mỗi vị trí trong mảng. Nếu không có, in \(0\).

Constraints

  • \(1 \leq n \leq 2 \cdot 10 ^ 5\)
  • \(1 \leq x_i \leq 10 ^ 9\)

Example

Sample input

8
2 5 1 4 8 3 2 5

Sample output

0 1 0 3 4 3 3 7


Bình luận


  • 0
    bienkhoatinh    4:44 p.m. 12 Tháng 5, 2024 đã chỉnh sửa

    solution theo stack cho ae tham khảo

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e6 + 6;
    int n, a[N];
    stack <int> s;
    int main() {
        ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
    
        for (int i = 1; i <= n; i++) {
            while (!s.empty() && a[s.top()] >= a[i]) {
                s.pop();
            }
            if (!s.empty())
                cout << s.top() << " ";
            else cout << 0 << " ";
            s.push(i);
        }
    }
    

  • 1 bình luận nữa