众所周知,jockbutt 是一个可爱的女孩纸。

jockbutt 有一个正整数序列,长度为 n,分别为 a1,a2...an,她非常喜欢这个序列,平时都非常爱惜它们。
可是有一天,当 jockbutt 在和你约会的时候,有一只淘气的小猴子改变了这个序列。
猴子操作了 m 次。
猴子的操作有两种类型:
特别且显然地,当 x=y,新的 x 就等于原来的 x 的两倍或平方。
序列最后结果形如 b1,b2...bn。
等到 jockbutt 回来时,全洛谷的人都在看猴子。其实 jockbutt 才是他们看的猴子吧
jockbutt 非常生气,希望你能告诉她这个序列最初的形态,也就是 a1,a2,a3,...,an,否则她就会嘤嘤嘤...
一共有 m+2 行。
第一行输入两个数 n,m。
第二行输入 n 个数 b1,b2,⋯,bn,表示经过操作后的序列。
第 3∼m+2 行每一行输入 3 个数 k,x,y ,分别表示操作类型,以及操作中的 x 和 y。
一行,n 个整数 a1,a2...an,表示序列最初的样子。
5 5
12 1 12 4 2
1 3 2
1 4 3
2 3 4
1 5 2
2 1 3
1 1 2 1 1
本题采用捆绑测试。
| 子任务编号 | 分值 | 特殊限制 |
|---|---|---|
| 1 | 25 | 1≤n,m≤10 |
| 2 | 25 | 1≤n≤100,1≤m≤50 |
| 3 | 50 | 无 |
#include<bits/stdc++.h>
using namespace std;
int a[1005],b[1005],c[1005],k[1005];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<m;i++)
{
cin>>k[i]>>b[i]>>c[i];
}
for(int i=m-1;i>=0;i++)
{
if(k[i]==1)
{
if(a[b[i]]==a[c[i]])
{
a[b[i]]=a[b[i]]/2;
}else{
a[b[i]]=a[b[i]]-a[c[i]];
}
}
if(k[i]==2)
{
if(a[b[i]]==a[c[i]])
{
a[b[i]]=sqrt(a[b[i]]);
}else{
a[b[i]]=a[b[i]]/a[c[i]];
}
}
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
}