这个题呢,我偷懒用的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; }