| 比赛 |
期末考试2 |
评测结果 |
AATTTTTTTT |
| 题目名称 |
魔法 |
最终得分 |
20 |
| 用户昵称 |
exil |
运行时间 |
5.831 s |
| 代码语言 |
C++ |
内存使用 |
107.33 MiB |
| 提交时间 |
2026-02-10 09:51:50 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node{
int f,m,z;
};
node s[300000];
map<int,int> m[300000];
int find(int x,int wei){
if(m[x][wei]==0){
if(s[x].z==1){
m[x][wei]=max(find(s[x].f,wei),find(s[x].m,wei));
}
else{
m[x][wei]=min(find(s[x].f,wei),find(s[x].m,wei));
}
return m[x][wei];
}
else return m[x][wei];
}
signed main(){
freopen("breeding.in","r",stdin);
freopen("breeding.out","w",stdout);
int n,k,q;
scanf("%lld%lld%lld",&n,&k,&q);
for(int i = 1;i<=k;i++){
for(int j = 1;j<=n;j++){
int u;
scanf("%lld",&u);
m[i][j]=u;
}
}
int cnt=k;
for(int i = 1;i<=q;i++){
int a;
scanf("%lld",&a);
if(a==1){
cnt++;
scanf("%lld%lld",&s[cnt].f,&s[cnt].m);
s[cnt].z=1;
}
else if(a==2){
cnt++;
scanf("%lld%lld",&s[cnt].f,&s[cnt].m);
s[cnt].z=2;
}
else{
int x,y;
scanf("%lld%lld",&x,&y);
if(m[x][y]==0){
if(s[x].z==1){
m[x][y]=max(find(s[x].f,y),find(s[x].m,y));
printf("%lld\n",m[x][y]);
}
else{
m[x][y]=min(find(s[x].f,y),find(s[x].m,y));
printf("%lld\n",m[x][y]);
}
}
else printf("%lld\n",m[x][y]);
}
}
return 0;
}