离散化 和多维线段树
来源:互联网 发布:澳门网络博客公司 编辑:程序博客网 时间:2024/05/21 06:55
poj 1151 离散化
分类: 练习 2013-05-25 10:07 196人阅读 评论(0)收藏 举报
ACMC数据结构离散化
http://poj.org/problem?id=1151
题目大意:给出 n 个矩形的“左下”和“右上”顶点坐标,求面积并;
思路:由于坐标值为实数,所以不能直接用数组模拟,要先将所有坐标值离散化处理;
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<algorithm>
- using namespace std;
- #define SIZE 103<<1
- double a[SIZE][4],x[SIZE],y[SIZE];
- int map[SIZE][SIZE];
- int main()
- {
- int T=1,n,i,j,l,k;
- int x1,y1,x2,y2;
- while(scanf("%d",&n),n){
- for(i=0,k=0;i<n;i++){
- scanf("%lf%lf%lf%lf",&a[i][0],&a[i][1],&a[i][2],&a[i][3]);
- x[k]=a[i][0];
- y[k]=a[i][1];
- k++;
- x[k]=a[i][2];
- y[k]=a[i][3];
- k++;
- }
- sort(x,x+k);
- sort(y,y+k);
- memset(map,0,sizeof(map));
- for(i=0;i<n;i++){
- for(x1=0;x1<k;x1++){
- if(x[x1]==a[i][0])
- break;
- }
- for(y1=0;y1<k;y1++){
- if(y[y1]==a[i][1])
- break;
- }
- for(x2=0;x2<k;x2++){
- if(x[x2]==a[i][2])
- break;
- }
- for(y2=0;y2<k;y2++){
- if(y[y2]==a[i][3])
- break;
- }
- for(l=x1;l<x2;l++){
- for(j=y1;j<y2;j++){
- map[l][j]=1;
- }
- }
- }
- double sum=0;
- for(i=0;i<k-1;i++){
- for(j=0;j<k-1;j++){
- if(map[i][j]==1){
- sum+=(x[i+1]-x[i])*(y[j+1]-y[j]);
- }
- }
- }
- printf("Test case #%d\n",T++);
- printf("Total explored area: %.2lf\n\n",sum);
- }
- return 0;
- }
- 离散化 和多维线段树
- 线段树+离散化
- 离散化 + 线段树
- 线段树离散化
- 线段树离散化
- POJ_2528 线段树+离散化
- HDU3577 离散化+线段树
- poj2528 线段树+离散化
- poj2528线段树+离散化
- hdu4325线段树+离散化
- POJ2528 离散化线段树
- 【线段树+离散化】Cover
- poj2482 离散化+线段树
- poj2528_线段树+离散化
- poj1151(线段树+离散化)
- hdu3743(线段树+离散化)
- 数据离散化 & 线段树
- poj2528(线段树+离散化)
- hdu2767Proving Equivalences(强连通+缩点)
- 最小生成树
- HDU 4354 Missile 树的最大独立集+枚举
- D3D混合纹理
- js 当中的预编译
- 离散化 和多维线段树
- 嵌入式开发基础----register和volatile关键字
- Oracle sql语句
- C可变参数的函数
- nbutoj1482
- C++的namespace详解1
- 重載、覆蓋、隱藏
- Code Fragmen-重载的方法,参数少的去调用参数多的。
- const总结