1 条题解

  • 0
    @ 2026-6-19 10:30:48

    📝 题目大意

    维护一个初始为空的数列,支持两种操作:向末尾添加元素,以及查询从末尾倒数第 kk 个元素的值。保证查询时数列长度 k\ge k

    💡 解题思路

    1. 题目分析Q100Q \le 100,数据规模极小,直接使用 vector 模拟即可,无需任何复杂数据结构。
    2. 算法推导
      • 使用 vector<int> A 存储数列。
      • 对于 type == 1 操作,读入 xx 后执行 A.push_back(x)
      • 对于 type == 2 操作,读入 kk,从末尾数第 kk 个元素对应下标为 A.size() - k(因为末尾元素下标为 size1\text{size}-1,倒数第 kk 个即为 sizek\text{size}-k)。直接输出 A[A.size() - k]
    3. 边界与细节
      • 题目保证查询时数列长度 k\ge k,因此无需做越界检查。
      • xx 最大可达 10910^9int 足够(23112.1×1092^{31} - 1 \approx 2.1 \times 10^9)。

    ⏱️ 复杂度分析

    • 时间复杂度O(Q)O(Q),每个查询 O(1)O(1) 处理。
    • 空间复杂度O(Q)O(Q),存储数列中的元素。

    💻 标准代码 (C++)

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main() {
        int Q;
        cin >> Q;
    
        vector<int> A;  // 存储数列
    
        for (int i = 0; i < Q; i++) {
            int type;
            cin >> type;
    
            if (type == 1) {
                // 操作 1:向末尾添加元素 x
                int x;
                cin >> x;
                A.push_back(x);
            } else if (type == 2) {
                // 操作 2:查询从末尾数第 k 个元素
                int k;
                cin >> k;
                // 末尾元素下标为 size-1,倒数第 k 个下标为 size-k
                cout << A[A.size() - k] << "\n";
            }
        }
    
        return 0;
    }
    
    • 1

    信息

    ID
    771
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者