题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941

题目大意:给你10^5个点。每一个点有一个数值。点的xy坐标是0~10^9。点存在于矩阵中。然后给出10^5个操作。1代表交换行。2代表交换列,3代表查询坐标为xy点的数值。

数据量非常大........ 所以一直没有思路

后来赛后看了题解是先用离散化然后存在线性map里面。

用hx,hy来存放离散化后的点的坐标,用linkx,linky来存放点离散化之后的点的坐标的行与列。

还是对于STL里面的基础运用掌握不牢。

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<map>
using namespace std;
#define maxn 100010 struct node {
     int u,v,w;
} point[maxn]; //其基本的原理是用一个线性的map存放。
//map里面的<int,int>是map一个特征。最后其所占的空间还是maxn这么多
map<int,int> p_w[maxn];
map<int,int> hx,hy; bool  cmpx(node A,node B)
{
     return A.u<B.u;
} bool cmpy(node A,node B)
{
     return A.v<B.v;
} int main ()
{
     int W;
     scanf("%d",&W);
     for(int w=1; w<=W; w++) {
          ///初始化
          for(int i=0; i<maxn; i++) p_w[i].clear();
          hx.clear();
          hy.clear();           int N,M,K;
          scanf("%d%d%d",&N,&M,&K);
          for(int i=0; i<K; i++)
               scanf("%d%d%d",&point[i].u,&point[i].v,&point[i].w);           int tx=1;
          sort(point,point+K,cmpx);
          for(int i=0; i<K; i++) if(!hx[point[i].u]) hx[point[i].u]=tx++;           int ty=1;
          sort(point,point+K,cmpy);
          for(int i=0; i<K; i++) {
               if(!hy[point[i].v]) hy[point[i].v]=ty++;
               p_w[hx[point[i].u]][hy[point[i].v]]=point[i].w;
          }           int linkx[maxn];
          int linky[maxn];
          for(int i=0; i<maxn; i++) linkx[i]=i,linky[i]=i;           printf("Case #%d:\n",w);           int T;
          int Q,A,B;
          scanf("%d",&T);
          while(T--) {
               scanf("%d%d%d",&Q,&A,&B);                if(Q==1) {
                    int tem=linkx[hx[A]];
                    linkx[hx[A]]=linkx[hx[B]];
                    linkx[hx[B]]=tem;
               }
               if(Q==2) {
                    int tem=linky[hy[A]];
                    linky[hy[A]]=linky[hy[B]];
                    linky[hy[B]]=tem;
               }
               if(Q==3)
                    printf("%d\n",p_w[linkx[hx[A]]][linky[hy[B]]]);
          }
     }
}

HDU 4941 Magical Forest 【离散化】【map】的更多相关文章

  1. hdu 4941 Magical Forest (map容器)

    Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  2. HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第 ...

  3. hdu 4941 Magical Forest ( 双重map )

    题目链接 题意: 有一个n*m的田地,里边有k棵树,每棵树的位置为(xi,yi),含有能量值ci.之后又q个询问,分三种; 1)1 a b,将a行和b行交换 2)2 a b,将a列和b列交换 3)3 ...

  4. HDU 4941 Magical Forest --STL Map应用

    题意: 有n*m个格子(n,m <= 2*10^9),有k(k<=10^5)个格子中有值,现在有三种操作,第一种为交换两行,第二种为交换两列,交换时只有两行或两列都有格子有值或都没有格子有 ...

  5. hdu 4941 Magical Forest

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4941 Magical Forest Description There is a forest can ...

  6. STL : map函数的运用 --- hdu 4941 : Magical Forest

    Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  7. HDU 4941 Magical Forest (Hash)

    这个题比赛的时候是乱搞的,比赛结束之后学长说是映射+hash才恍然大悟.因此决定好好学一下hash. 题意: M*N的格子,里面有一些格子里面有一个值. 有三种操作: 1.交换两行的值. 2.交换两列 ...

  8. HDU 4941 Magical Forest(2014 Multi-University Training Contest 7)

    思路:将行列离散化,那么就可以用vector 存下10W个点 ,对于交换操作 只需要将行列独立分开标记就行   . r[i] 表示第 i 行存的是 原先的哪行         c[j] 表示 第 j ...

  9. hdu4941 Magical Forest (stl map)

    2014多校7最水的题   Magical Forest Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit ...

随机推荐

  1. 单机版搭建Hadoop环境图文教程详解

    安装过程: 一.安装Linux操作系统二.在Ubuntu下创建hadoop用户组和用户三.在Ubuntu下安装JDK四.修改机器名五.安装ssh服务六.建立ssh无密码登录本机七.安装hadoop八. ...

  2. [质疑]编程之美求N!的二进制最低位1的位置的问题

    引子:编程之美给出了求N!的二进制最低位1的位置的二种思路,但是呢?但是呢?不信你仔细听我道来. 1.编程之美一书给出的解决思路 问题的目标是N!的二进制表示中最低位1的位置.给定一个整数N,求N!二 ...

  3. signal()函数

    转自:http://blog.csdn.net/sddzycnqjn/article/details/7285760 1. 信号概念 信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件) ...

  4. ps 图片提取线稿方法2种 转

  5. public static void main(String arg[])

      该语句定义了main方法. main方法是程序执行的入口,所有的java程序都必须具备一个main()方法,而且必须按照如上的格式来定义. 不具有main方法的类可以编译,但不能执行.因为它没有m ...

  6. C++学习之路--类的构建以及数据转换存储

    注意理解下面的代码,数据的处理与转换. 头文件: #ifndef STACK_H #define STACK_H class Stack { struct Link { void* data; Lin ...

  7. [Android][Audio] audio_policy.conf文件分析

    不同的Android产品在音频的设计上通常是存在差异的,而这些差异可以同过Audio的配置文件audio_policy.conf来获得.在Android系统中音频配置文件存放路径有两处,存放地址可以从 ...

  8. Hbase学习记录(2)| Shell操作

    查看表结构 describe '表名' 查看版本 get '表名','zhangsan'{COLUMN=>'info:age',VERSIONS=>3} 删除整行 deleteall '表 ...

  9. js混淆工具

    1\  http://www.jasob.com 2\ http://developer.yahoo.com/yui/compressor

  10. cocos2dx android版本移植时的Error format not a string literal and no format arguments解决方案

    原文地址 : http://www.cnblogs.com/hhuang2012/p/3336911.html cocos2dx android版本移植时的Error format not a str ...