Stevehim @ 2022-10-27 12:44:55
RT
#include <bits/stdc++.h>
#define maxn 100010
using namespace std;
int n, m;
int Q;
vector<int> G[maxn];
int in[maxn]; //存储入度
int a[maxn]; //初始数列
int func[maxn]; //存储每个函数的类刑(下标表示函数序号)
int func1[maxn][2]; //记录第一类函数存储的下标及加数
int func2[maxn]; //记录第二类函数的乘数
int f3_s[maxn];//每个第三类函数连接的函数个数
int f3_n[maxn]; //记录第三类函数的序号
vector<int> func3[maxn]; //存储每个第三类函数的连接函数
int func3_number; //记录个数
int b[maxn];
void _print() {
for (int i = 0; i < n; i++) {
cout << a[i] << ' ';
}
cout << endl;
}
void one(int i, int x) {
// cout << a[i] << endl;
a[i - 1] += x;
}
void two(int x) {
for (int i = 0; i < n; i++) {
a[i] *= x;
}
// _print();
}
void three(int x) { //x表示序号
for (int i = 0; i < f3_s[x]; i++) {
switch (func[func3[x][i]]) { //取出函数类型
case 1: {
one(func1[func3[x][i]][0], func1[func3[x][i]][1]);
break;
}
case 2: {
two(func2[func3[x][i]]);
break;
}
case 3: {
three(func3[x][i]);
break;
}
}
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
cin >> m;
for (int i = 1; i <= m; i++) {
cin >> func[i];
switch (func[i]) {
case 1: {
cin >> func1[i][0] >> func1[i][1];
break;
}
case 2: {
cin >> func2[i];
// cout << i << ' ' << func[i] << ' ' << func2[i] << endl;
break;
}
case 3: {
cin >> f3_s[i];
int t;
for (int j = 0; j < f3_s[i]; j++) {
cin >> t;
func3[i].push_back(t);
}
// func3_number++;
break;
}
}
}
cin >> Q;
int number;
for (int i = 0; i < Q; i++) {
cin >> b[i];
}
for (int i = 0; i < Q; i++) {
number = b[i];
// cout << number << ' ' << func[number];
switch (func[number]) {
case 1: {
// cout << func1[number][0] << ' ' << func1[number][1] << endl;
one(func1[number][0], func1[number][1]);
break;
}
case 2: {
// cout << func2[number];
two(func2[number]);
break;
}
case 3: {
three(number);
break;
}
}
}
_print();
return 0;
}
by Carey_chen @ 2023-08-23 14:47:08
@Stevehim 好像没开 long long? 我的暴力就是因为long long WA掉的。
by Carey_chen @ 2023-08-23 14:53:33
还要取模,然后就过了