坐标离散化

int compress(int *x1,int *x2,int w){
   vector<int> xs;
   for(int i=0;i<N;i++){
     for(int d=-1;d<=1;d++){
        int tx1=x1[i]+d,tx2=x2[i]+d;
        if(1<=tx1&&tx1<=w) xs.push_back(tx1);
        if(1<=tx2&&tx2<=w) xs.push_back(tx2);
     }
   }
   sort(xs.begin(),xs.end());
   xs.erase(unique(xs.begin(),xs.end()),xs.end());
   for(int i=0;i<N;i++){
     x1[i]=find(xs.begin(),xs.end(),x1[i])-xs.begin();
     x2[i]=find(xs.begin(),xs.end(),x2[i])-xs.begin();
   }
   return xs.size();
}

原文地址:https://www.cnblogs.com/lmjer/p/8809523.html

时间: 2024-10-31 22:07:22

坐标离散化的相关文章

【坐标离散化】

坐标离散化 (来自<挑战程序设计竞赛>P164)给出题目和主体代码: 题目:区域的个数w*h的格子上画了n条或垂直或水平的宽度为1的直线.求出这些线将格子划分了多少个区域(w和h的范围都为[1, 1e6],n的范围为[1,500]) 思路:一般先想到的是类似水塘问题的处理,建立数组并深度优先搜索但是这个问题中w和h最大为1000000,所以没办法创建w*h的数组.因此我们要使用坐标离散化这一技巧 将前后没有变化的行列(意思是消除后不会影响区域个数的)相除后并不会影响区域的个数数组里只需要存储有

区域的个数(坐标离散化)

始终觉得秋叶拓哉书上那段代码,没有起到离散化的作用啊?估计是我智障吧...肯定是. compress 后的 X,Y 坐标绘制的 field 和原来的地图一样啊.到底为森么呢?到底为森么呢? import pprint def compress( li1, li2, size, nums ): vec = [] vec1 = [] for i in xrange( nums ): for d in xrange( -1, 2 ): temp1, temp2 = li1[i] + d, li2[i]

【坐标离散化】AOJ0531- Paint Color

日文题--一开始被题目骗了以为真的要写文件? 题目大意&&解答戳:? 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<algorithm> 6 #include<vector> 7 #include<queue> 8 using namespace std; 9 int w,

hihoCoder#1079(线段树+坐标离散化)

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho所在的学校举办社团文化节,各大社团都在宣传栏上贴起了海报,但是贴来贴去,有些海报就会被其他社团的海报所遮挡住.看到这个场景,小Hi便产生了这样的一个疑问——最后到底能有几张海报还能被看见呢? 于是小Ho肩负起了解决这个问题的责任:因为宣传栏和海报的高度都是一样的,所以宣传栏可以被视作长度为L的一段区间,且有

坐标离散化处理

<pre name="code" class="cpp">#include <bits/stdc++.h> using namespace std; #define maxn 505 typedef pair<int, int> P; int W, H, N; int X1[maxn], X2[maxn], Y1[maxn], Y2[maxn]; bool fld[maxn][maxn]; int d[2][4] = {{-1,

坐标离散化注意点

1.获得有几个不同的点&获得点在数组中的位置(为了从1开始计数): int totalX = unique(keyX.begin(), keyX.end()) - keyX.begin(); p[i].x = lower_bound(keyX.begin(), keyX.begin() + totalX, p[i].x) - keyX.begin() +1; len1 = unique(b + 1, b + 1 + len1) - (b + 1); p[i].x = lower_bound(b

[UVALive 6663 Count the Regions] (dfs + 离散化)

链接:https://icpcarchive.ecs.baylor.edu/index.php? option=com_onlinejudge&Itemid=8&page=show_problem&problem=4675 题目大意: 在一个平面上有 n (1<=n<=50) 个矩形.给你左上角和右下角的坐标(0<=x<=10^6, 0<=y<=10^6).问这些矩形将该平面划分为多少块. 解题思路: 因为n非常小,能够对整个图进行压缩.仅仅要不

HDU 1542 Atlantis 线段树+离散化+扫描线

题意:给出一些矩形的最上角坐标和右下角坐标,求这些矩形的面积并. NotOnlySuccess 线段树专辑中扫描线模板题,弱智的我对着大大的代码看了一下午才搞懂. 具体见思路见注释=.= #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #define lson rt<<1,l,mid #define rson rt<<1|1,mid

POJ 1151 Atlantis 线段树+离散化

题目链接:http://poj.org/problem?id=1151  http://acm.hdu.edu.cn/showproblem.php?pid=1542 题目大意:给你几个矩形的坐标,求他们的面积的并. 解题思路:可以参考http://www.cnblogs.com/kuangbin/archive/2011/08/16/2140544.html,实际上就是一个方向直接算出,另一个方向使用线段树维护已经覆盖的底边的长度.具体操作不算复杂:假想一条扫描下从下往上开始进行扫描,初始时候