这个题呢,我偷懒用的STL做的,对于交换操作可以直接交换2行/2列的编号值即可
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
struct Node
{
int col;
int row;
int val;
Node(){}
Node(int _row,int _col,int _val):row(_row),col(_col),val(_val){}
bool operator < (const Node &a)const
{
if(row==a.row)
return col<a.col;
return row<a.row;
}
};
int n,m,k,q;
map<int,int> hasrow,hascol,col,row;
vector<Node> s;
void Init()
{
hasrow.clear();
hascol.clear();
col.clear();
row.clear();
s.clear();
}
int main()
{
int T,cas=1;
scanf("%d",&T);
while(T--)
{
printf("Case #%d:\n",cas++);
Init();
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<k;i++)
{
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
x++;
y++;
s.push_back(Node(x,y,c));
hasrow[x]++;
hascol[y]++;
row[x]=x;
col[y]=y;
}
sort(s.begin(),s.end());
scanf("%d",&q);
while(q--)
{
int op,x,y;
scanf("%d%d%d",&op,&x,&y);
x++;
y++;
if(op==1)
{
if(hasrow[x]&&hasrow[y])
swap(row[x],row[y]);
}
else if(op==2)
{
if(hascol[x]&&hascol[y])
swap(col[x],col[y]);
}
else
{
x=row[x];
y=col[y];
int index=lower_bound(s.begin(),s.end(),Node(x,y,0))-s.begin();
if(s[index].row==x&&s[index].col==y)
printf("%d\n",s[index].val);
else
printf("0\n");
}
}
}
return 0;
}