1 #include <iostream> 2 #include <cstdio> 3 #include <map> 4 #include <algorithm> 5 6 using namespace std; 7 8 struct Node 9 { 10 int x; 11 int y; 12 int c; 13 }l[100000]; 14 15 map <int, map<int, int> > fmap; 16 map <int ,int>hashx,hashy; 17 int T,n,m,k,mapx,mapy,t,cas,lianx[100010],liany[100010],Q,A,B,X,Y; 18 19 bool cmpx(Node a,Node b) 20 { 21 return a.x<b.x; 22 } 23 bool cmpy(Node a,Node b) 24 { 25 return a.y<b.y; 26 } 27 28 int main() 29 { 30 int CAS; 31 scanf("%d", &CAS); 32 for(int cas=1;cas<=CAS;cas++) 33 { 34 scanf("%d%d%d",&n,&m,&k); 35 printf("Case #%d:\n",cas); 36 for(int i=0;i<k;i++)scanf("%d%d%d",&l[i].x,&l[i].y,&l[i].c); 37 fmap.clear();hashx.clear();hashy.clear();mapx=mapy=0; 38 sort(l,l+k,cmpx); 39 for(int i=0;i<k;i++)if(!hashx[l[i].x])hashx[l[i].x]=++mapx; 40 sort(l,l+k,cmpy); 41 for(int i=0;i<k;i++) 42 { 43 if(!hashy[l[i].y])hashy[l[i].y]=++mapy; 44 fmap[hashx[l[i].x]][hashy[l[i].y]]=l[i].c; 45 } 46 for(int i=1;i<=mapx;i++)lianx[i]=i; 47 for(int i=1;i<=mapy;i++)liany[i]=i; 48 scanf("%d",&t); 49 for(int i=0;i<t;i++) 50 { 51 scanf("%d%d%d",&Q,&A,&B); 52 if(Q==1) 53 { 54 X=hashx[A];Y=hashx[B]; 55 if(X && Y)swap(lianx[X],lianx[Y]); 56 } 57 else if(Q==2) 58 { 59 X=hashy[A];Y=hashy[B]; 60 if(X && Y)swap(liany[X],liany[Y]); 61 } 62 else if(Q==3) 63 { 64 X=hashx[A];Y=hashy[B]; 65 if(X && Y)printf("%d\n",fmap[lianx[X]][liany[Y]]); 66 else printf("0\n"); 67 } 68 } 69 } 70 return 0; 71 }
原文:http://www.cnblogs.com/767355675hutaishi/p/3908406.html