HDU 4941 Magical Forest 【离散化】【map】
题目链接: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】的更多相关文章
- hdu 4941 Magical Forest (map容器)
Magical Forest Time Limit: 24000/12000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第 ...
- 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 ...
- HDU 4941 Magical Forest --STL Map应用
题意: 有n*m个格子(n,m <= 2*10^9),有k(k<=10^5)个格子中有值,现在有三种操作,第一种为交换两行,第二种为交换两列,交换时只有两行或两列都有格子有值或都没有格子有 ...
- hdu 4941 Magical Forest
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4941 Magical Forest Description There is a forest can ...
- STL : map函数的运用 --- hdu 4941 : Magical Forest
Magical Forest Time Limit: 24000/12000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- HDU 4941 Magical Forest (Hash)
这个题比赛的时候是乱搞的,比赛结束之后学长说是映射+hash才恍然大悟.因此决定好好学一下hash. 题意: M*N的格子,里面有一些格子里面有一个值. 有三种操作: 1.交换两行的值. 2.交换两列 ...
- HDU 4941 Magical Forest(2014 Multi-University Training Contest 7)
思路:将行列离散化,那么就可以用vector 存下10W个点 ,对于交换操作 只需要将行列独立分开标记就行 . r[i] 表示第 i 行存的是 原先的哪行 c[j] 表示 第 j ...
- hdu4941 Magical Forest (stl map)
2014多校7最水的题 Magical Forest Magical Forest Time Limit: 24000/12000 MS (Java/Others) Memory Limit ...
随机推荐
- 单机版搭建Hadoop环境图文教程详解
安装过程: 一.安装Linux操作系统二.在Ubuntu下创建hadoop用户组和用户三.在Ubuntu下安装JDK四.修改机器名五.安装ssh服务六.建立ssh无密码登录本机七.安装hadoop八. ...
- [质疑]编程之美求N!的二进制最低位1的位置的问题
引子:编程之美给出了求N!的二进制最低位1的位置的二种思路,但是呢?但是呢?不信你仔细听我道来. 1.编程之美一书给出的解决思路 问题的目标是N!的二进制表示中最低位1的位置.给定一个整数N,求N!二 ...
- signal()函数
转自:http://blog.csdn.net/sddzycnqjn/article/details/7285760 1. 信号概念 信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件) ...
- ps 图片提取线稿方法2种 转
- public static void main(String arg[])
该语句定义了main方法. main方法是程序执行的入口,所有的java程序都必须具备一个main()方法,而且必须按照如上的格式来定义. 不具有main方法的类可以编译,但不能执行.因为它没有m ...
- C++学习之路--类的构建以及数据转换存储
注意理解下面的代码,数据的处理与转换. 头文件: #ifndef STACK_H #define STACK_H class Stack { struct Link { void* data; Lin ...
- [Android][Audio] audio_policy.conf文件分析
不同的Android产品在音频的设计上通常是存在差异的,而这些差异可以同过Audio的配置文件audio_policy.conf来获得.在Android系统中音频配置文件存放路径有两处,存放地址可以从 ...
- Hbase学习记录(2)| Shell操作
查看表结构 describe '表名' 查看版本 get '表名','zhangsan'{COLUMN=>'info:age',VERSIONS=>3} 删除整行 deleteall '表 ...
- js混淆工具
1\ http://www.jasob.com 2\ http://developer.yahoo.com/yui/compressor
- 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 ...