热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

poj2528Mayor'sposters

*题意:往区间[1,10000000]的墙上贴海报,海报数量

/*

题意:往区间[1,10000000]的墙上贴海报&#xff0c;海报数量<&#61;10000&#xff0c;
海报之间彼此可以覆盖&#xff0c;问最后能看到的海报数量。

考虑到区间太大,直接线段树无疑会MLE,所以要对其离散化&#xff0c;再用线段树。
基本做法是先对所有端点坐标进行排序&#xff0c;用相应序号代替端点坐标构造线段树进行计算。
这样最大的序号也只是2*10000&#xff0c;这样就减少了没必要的搜索的时间和内存空间。
同时为了提高效率&#xff0c;采取倒插入的方式&#xff0c;即从数据的最后一行开始处理&#xff0c;在插入的同时进行判断。
在统计覆盖的时候&#xff0c;采用倒插入的方式从树的根开始进行统计

*/


#include // 线段树&#43;离散化
#include

using namespace std;
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
struct segment
{
int l,r;
int cover; //该区间已被覆盖的长度
}tree[80000];


int origin[80000][2]; //原始输入数据
bool vis[10000010]; //标记origin数组的元素是否已被处理

int arr[80000]; //离散化前的元素记录
int Hash[10000010]; //离散化后的元素记录

void BuildTree(int n,int s,int t)
{
tree[n].l&#61;s;
tree[n].r&#61;t;
tree[n].cover&#61;0;
if(s
{
int mid&#61;(s&#43;t)/2;
BuildTree(2*n,s,mid);
BuildTree(2*n&#43;1,mid&#43;1,t);
}
}

int insert(int n,int s,int t) //若在范围[s,t]内可以找到空白的区域,则这张海报是可见的&#xff0c;返回1
{

if(tree[n].cover&#61;&#61;tree[n].r-tree[n].l&#43;1) //区间已全部被覆盖
{

return 0;
}
else //区间还有尚未被覆盖的地方
{

if(s&#61;&#61;tree[n].l&&t&#61;&#61;tree[n].r) //参数刚好是整个区间,所以肯定可以找到尚未被覆盖的地方
{

tree[n].cover&#61;tree[n].r-tree[n].l&#43;1;
return 1;
}
else //参数不是整个区间&#xff0c;则要继续搜索孩子结点
{

int ok&#61;0;
int mid&#61;(tree[n].l&#43;tree[n].r)>>1;
if(t<&#61;mid)
{
if(insert(2*n,s,t)) //继续搜索左孩子
ok&#61;1;

}
else if(s>&#61;mid&#43;1)
{
if(insert(2*n&#43;1,s,t)) //继续搜索右孩子
ok&#61;1;

}
else //区间横跨左右孩子,分段搜索左右孩子
{

if(insert(2*n,s,mid)) //找到任何一段空白的都可以
ok&#61;1;

if(insert(2*n&#43;1,mid&#43;1,t))
ok&#61;1;
}
tree[n].cover&#61;tree[2*n].cover&#43;tree[2*n&#43;1].cover; //更新覆盖情况
return ok;

}
}
}

int main()
{
int cases,i;
scanf("%d",&cases);
while(cases--)
{
int num,rear&#61;0;
scanf("%d",&num);
for(i&#61;1;i<&#61;num;&#43;&#43;i)
{
scanf("%d%d",&origin[i][0],&origin[i][1]);
if(!vis[origin[i][0]]) //保证arr数组中元素惟一
{

arr[&#43;&#43;rear]&#61;origin[i][0];
vis[origin[i][0]]&#61;true;
}
if(!vis[origin[i][1]])
{
arr[&#43;&#43;rear]&#61;origin[i][1];
vis[origin[i][1]]&#61;true;
}
}
qsort(arr&#43;1,rear,sizeof(arr[1]),cmp); //升序排序

//离散化过程
for(i&#61;1;i<&#61;rear;&#43;&#43;i)

{
vis[arr[i]] &#61; false; //重新对vis数组置为false
Hash[arr[i]]&#61;i;

}
BuildTree(1,1,rear); //离散化后结点下标[1-rear]
int ans&#61;0;

for(i&#61;num;i>&#61;1;--i)
{
if(insert(1,Hash[origin[i][0]],Hash[origin[i][1]]))
ans&#43;&#43;;
}
printf("%d\n",ans);
}
return 0;
}


转:https://www.cnblogs.com/mjc467621163/archive/2011/07/20/2112210.html



推荐阅读
  • mysql 分库分表策略_【数据库】分库分表策略
    关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多, ... [详细]
  • 快速排序是基于分治策略的一种排序算法,其平均时间复杂度为O(n log n),在大多数情况下表现优于其他排序算法。本文将详细介绍快速排序的工作原理,并提供一个Java语言的具体实现。 ... [详细]
  • Iris 开发环境配置指南 (最新 Go & IntelliJ IDEA & Iris V12)
    本指南详细介绍了如何在最新的 Go 语言环境及 IntelliJ IDEA 中配置 Iris V12 框架,适合初学者和有经验的开发者。文章提供了详细的步骤说明和示例代码,帮助读者快速搭建开发环境。 ... [详细]
  • 手把手教你构建简易JSON解析器
    本文将带你深入了解JSON解析器的构建过程,通过实践掌握JSON解析的基本原理。适合所有对数据解析感兴趣的开发者。 ... [详细]
  • 探索PWA H5 Web App优化之路(Service Worker与Lighthouse的应用)
    本文探讨了如何通过Service Worker和Lighthouse工具来优化PWA H5 Web App,旨在提升用户体验,包括提高加载速度、增强离线访问能力等方面。 ... [详细]
  • 一个产品数组拼图|集合 2 (O(1)空间) ... [详细]
  • 每位开发者都应该拥有一个展示自我技能与分享知识的空间——个人技术博客。本文将指导你如何使用静态网站生成器Hexo结合GitHub Pages搭建这样一个平台。 ... [详细]
  • A题简单判断#includeusingnamespacestd;typedeflonglongll;intt;intmain(){cint;whil ... [详细]
  • 程序打印菱形 ... [详细]
  • 本文介绍如何利用C语言在Linux操作系统中实现递归创建多级目录的功能,包括必要的头文件引入和函数实现。 ... [详细]
  • 本文介绍了一个使用C++编写的算法,用于从给定的字符串中找出最长的连续重复子串。例如,对于输入字符串“ababc”,算法将返回“ab”。文中不仅提供了详细的代码实现,还分析了算法的时间和空间复杂度。 ... [详细]
  • 本文介绍了Windows驱动开发的基础知识,包括WDF(Windows Driver Framework)和WDK(Windows Driver Kit)的概念及其重要特性,旨在帮助开发者更好地理解和利用这些工具来简化驱动开发过程。 ... [详细]
  • 本文探讨如何使用C语言开发一个座位分配系统,包括飞机座位选择、考场座位随机分配等功能,并提供了详细的代码示例。 ... [详细]
  • 本文详细探讨了UML用例图中的两种重要关系——包含关系和扩展关系,通过具体示例解析这两种关系的应用场景及其实现方式。 ... [详细]
  • VSCode中使用Clang-Format进行C/C++代码格式化配置
    本文介绍了如何在VSCode中配置Clang-Format以实现C/C++代码的自动格式化,包括安装必要的扩展、配置文件的创建以及常用设置的解释。建议阅读官方文档以获取更多详细信息。 ... [详细]
author-avatar
qq7654ijh_416
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有