比赛 期末考试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;
}