首先,我们需要将操作逆向进行,即从结果序列推导出初始序列。

对于每个操作,我们可以根据操作类型进行逆向操作:

  1. 如果是加法操作,我们可以将结果序列中的第x个元素减去第y个元素,得到原始序列中的第x个元素。
  2. 如果是乘法操作,我们可以将结果序列中的第x个元素除以第y个元素,得到原始序列中的第x个元素。

接下来,我们将所有操作都逆向进行,即可得到原始序列。

具体实现时,我们可以使用一个数组来保存原始序列,初始化为结果序列。然后遍历所有操作,根据操作类型进行逆向操作,并更新原始序列。最后输出原始序列即可。

以下是具体的实现代码:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;

    vector<int> result(n);
    for (int i = 0; i < n; i++) {
        cin >> result[i];
    }

    for (int i = 0; i < m; i++) {
        int type, x, y;
        cin >> type >> x >> y;

        if (type == 1) {
            result[x-1] -= result[y-1];
        } else {
            result[x-1] /= result[y-1];
        }
    }

    for (int i = 0; i < n; i++) {
        cout << result[i] << " ";
    }
    cout << endl;

    return 0;
}

时间复杂度分析:该算法需要遍历所有操作和序列元素,因此时间复杂度为O(m+n)。

空间复杂度分析:该算法使用一个数组来保存原始序列,因此空间复杂度为O(n)

jockbutt 有一个正整数序列长度为 �n分别为 �1�2��a 1 a 2 a n 她非常喜欢这个序列平时都非常爱惜它们。可是有一天当 jockbutt 在和你约会的时候有一只淘气的小猴子改变了这个序列。猴子操作了 �m 次。猴子的操作有两种类型:1 x y1 x y 表示第 �x 个元素加上第 �y 个元素。2 x y2 x y 表示第 �x 个元素乘上第 �y 个元素。特别且显然地

原文地址: https://www.cveoy.top/t/topic/h0xf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录