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

POJ1528Mayor'sposters

题意是说给出一连串的展板,有10000000块。然后要贴n(0最后能看到多少个广告。我的做法是先离散化数据,然后构建线段树。然后查询。不离散化那么树所需

题意是说给出一连串的展板,有10000000块。

然后要贴n (0

最后能看到多少个广告。


我的做法是 先离散化数据,然后构建线段树。然后查询。

不离散化那么 树所需要的空间就太大了。


注意这个样例

3

1 5

1 3

4 5


如果答案是3那么是错的。

因为每个点代表一块板。

而不是算两个数字之间的区间有没有被覆盖。


PS:貌似我的办法有点笨。耗时有点高。


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define INF 0x7fffffff
#define eps 1e-8
#define LL long long
#define PI 3.141592654
#define CLR(a,b) memset(a,b,sizeof(a))
#define FOR(i,a,b) for(int i=a;i=b;i--)
#define sf scanf
#define pf printf
#define all(v) (v).begin(),(v).end()
#define acfun std::ios::sync_with_stdio(false)

#define SIZE (10000  +1)
#define MOD 1000000007
using namespace std;

struct post
{
    int pos;
    int site;
}l[SIZE*4];
bool cmp1(post a,post b)
{
    return a.site=0)
    t[o]+=up[o]*(r-l+1);
    else if(l=r)
        up[o]=us;
    else
    {
        if(up[o]>=0)
        {
            up[o*2]=up[o*2+1]=up[o];
            up[o]=-1;
        }
        int m=(l+r)>>1;
        if(ul<=m)update(l,m,o*2);
        else cal(l,m,o*2);
        if(ur>m)update(m+1,r,o*2+1);
        else cal(m+1,r,o*2+1);
    }
    cal(l,r,o);
}
int ql,qr;
int query(int l,int r,int o)
{
    int ans=0;
    if(up[o]>=0)
        ans+=up[o]*(min(r,qr)-max(l,ql)+1);
    else if(ql<=l&&qr>=r)
        ans+=t[o];
    else
    {
        int m=(l+r)>>1;
        if(ql<=m)ans+=query(l,m,o*2);
        if(qr>m)ans+=query(m+1,r,o*2+1);
    }
    return ans;
}
bool vis[SIZE*8];
mappo;
int main()
{
    int tt;
    sf("%d",&tt);
    while(tt--)
    {
        int m,cnt=1;
        sf("%d",&m);
        FOR(i,0,m)
        {
            sf("%d%d",&l[i*2].site,&l[i*2+1].site);
            l[i*2].pos=i*2,l[i*2+1].pos=i*2+1;
        }
        sort(l,l+m*2,cmp1);
        po.clear();
        FOR(i,0,m*2)
        {
            if(po[l[i*2].site]==0)
                po[l[i*2].site]=cnt++;
            l[i*2].site=po[l[i*2].site];
            if(po[l[i*2+1].site]==0)
                po[l[i*2+1].site]=cnt++;
            l[i*2+1].site=po[l[i*2+1].site];
        }
        sort(l,l+m*2,cmp2);
        //离散化后还原
        CLR(t,0);
        CLR(up,-1);
        CLR(vis,0);
        int ans=0;
        int color=1;
        FOR(i,0,m)
        {
            ul=l[i*2].site,ur=l[i*2+1].site;
            us=color++;
            update(1,cnt-1,1);
        }

        FOR(i,1,cnt)
        {
            ql=qr=i;
            int tmp=0;
            tmp=query(1,cnt-1,1);
            //pf("%d:%d\n",i,tmp);
            if(tmp==0)continue;
            vis[tmp]=1;
        }
        FOR(i,0,color)
        if(vis[i])ans++;
        pf("%d\n",ans);
    }
}


POJ 1528 Mayor&#39;s posters


推荐阅读
  • 本文深入解析了线程事件机制的原理及其在实际应用中的案例。通过具体示例,展示了多个线程在不同状态下的交互过程,如线程1、2、3处于等待连接状态,而线程4则负责检测服务的运行状况,并在检测完成后通知其他线程开始连接。该机制有效提高了多线程环境下的资源利用效率和系统响应速度。 ... [详细]
  • 在多堆石子游戏中,通过分析Nim博弈策略,探讨了如何在限定时间和内存条件下实现最优解。本文详细研究了石子游戏中的数学原理和算法优化方法,旨在为参与者提供有效的策略指导。具体而言,文章讨论了不同堆数下的Nim值计算及其应用,帮助玩家在复杂的博弈环境中取得优势。 ... [详细]
  • C++ STL 常见函数应用详解与实例解析
    本文详细解析了 C++ STL 中常见函数的应用,并通过具体实例进行说明。特别地,文章对迭代器(iterator)的概念进行了深入探讨,将其视为一种将迭代操作抽象化的工具,便于在不同容器间进行元素访问和操作。此外,还介绍了迭代器的基本类型、使用方法及其在算法中的应用,为读者提供了丰富的实践指导。 ... [详细]
  • 题目链接:http://poj.org/problem?id=3083。题目描述:给定一个迷宫,其中 'S' 表示起点,'E' 表示终点,'#' 表示墙壁,'.' 表示可通行的道路。起点和终点均位于迷宫的边界上,并且保证存在唯一路径。任务是求从起点 'S' 到终点 'E' 的最短路径步数,且优先考虑向左转弯。通过深度优先搜索(DFS)和广度优先搜索(BFS)算法进行路径探索,分析两种方法的优劣及适用场景。 ... [详细]
  • 在BZOJ 2563中,阿狸与桃子进行了一场策略博弈游戏。该问题的时间限制为3秒,内存限制为128MB,目前已有97次提交记录。通过对游戏规则和策略的深入分析,本文探讨了双方在不同情况下的最优决策路径,并提出了高效的算法解决方案。 ... [详细]
  • 在Python编程中,探讨了并发与并行的概念及其区别。并发指的是系统同时处理多个任务的能力,而并行则指在同一时间点上并行执行多个任务。文章详细解析了阻塞与非阻塞操作、同步与异步编程模型,以及IO多路复用技术的应用。通过模拟socket发送HTTP请求的过程,展示了如何创建连接、发送数据和接收响应,并强调了默认情况下socket的阻塞特性。此外,还介绍了如何利用这些技术优化网络通信性能和提高程序效率。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • Git基础操作指南:掌握必备技能
    掌握 Git 基础操作是每个开发者必备的技能。本文详细介绍了 Git 的基本命令和使用方法,包括初始化仓库、配置用户信息、添加文件、提交更改以及查看版本历史等关键步骤。通过这些操作,读者可以快速上手并高效管理代码版本。例如,使用 `git config --global user.name` 和 `git config --global user.email` 来设置全局用户名和邮箱,确保每次提交时都能正确标识提交者信息。 ... [详细]
  • 为了在Fragment中直接调用Activity的方法,可以通过定义一个接口并让Activity实现该接口来实现。具体步骤包括:首先在Fragment中声明一个接口,并在Activity中实现该接口。接着,在Fragment中通过类型转换检查Activity是否实现了该接口,如果实现了则调用相应的方法。这种方法不仅提高了代码的解耦性,还增强了模块间的通信效率。此外,还可以通过ViewModel或LiveData等现代Android架构组件进一步优化这一过程,以实现更加高效和可靠的通信机制。 ... [详细]
  • 在Mac平台上通过终端操作完成MySQL的启动与彻底关闭——八步指南
    在Mac平台上,通过终端操作实现MySQL的启动与完全关闭,本文提供了一套详细的八步指南。首先,在Finder中使用快捷键进入 `/usr/local` 目录,找到并进入 `mysql` 文件夹。接着,右键选择该文件夹并从上下文菜单中打开终端。在终端中,输入并执行 `./scripts/mysql_install` 命令以开始安装或初始化过程。后续步骤将指导用户如何顺利启动和安全关闭MySQL服务,确保系统资源的有效管理。 ... [详细]
  • 前端技术实现调用摄像头进行拍照功能
    在公司项目中,为了实现调用摄像头进行拍照的功能,我们深入研究了HTML5的相关技术。尽管Java在许多方面表现出色,但在这一场景下,HTML5的灵活性和易用性更胜一筹。本文将分享具体的代码设计和实现细节,帮助开发者快速掌握这一功能。 ... [详细]
  • 大数据应用实例:电视收视率分析企业项目实操第二篇
    本文继续探讨大数据在电视收视率分析中的应用,详细介绍了如何在CentOS系统中进行防火墙管理。针对CentOS 6.5及更早版本,提供了具体的命令操作步骤,包括停止防火墙服务和禁用防火墙启动。此外,还深入讨论了这些操作对数据传输和系统安全的影响,为实际项目实施提供了宝贵的技术参考。 ... [详细]
  • Spring Security 认证模块的项目构建与初始化
    本文详细介绍了如何构建和初始化Spring Security认证模块的项目。首先,通过创建一个分布式Maven聚合工程,该工程包含四个模块,分别为core、browser(用于演示)、app等,以构成完整的SeehopeSecurity项目。在项目构建过程中,还涉及日志生成机制,确保能够输出关键信息,便于调试和监控。 ... [详细]
  • 如何在IDEA中安装和配置反编译插件以提高代码审查效率
    在 IntelliJ IDEA 中提升代码审查效率的一种方法是安装和配置反编译插件。首先,进入 IDEA 的设置界面,然后导航到插件管理部分。接下来,搜索 "ideaJad" 插件并进行安装。安装完成后,重启 IDEA 以确保插件生效。这将帮助你在审查二进制文件时更加高效地查看源代码。 ... [详细]
  • 优化后的标题:数据网格视图(DataGridView)在应用程序中的高效应用与优化策略
    在应用程序中,数据网格视图(DataGridView)的高效应用与优化策略至关重要。本文探讨了多种优化方法,包括但不限于:1)通过合理的数据绑定提升性能;2)利用虚拟模式处理大量数据,减少内存占用;3)在格式化单元格内容时,推荐使用CellParsing事件,以确保数据的准确性和一致性。此外,还介绍了如何通过自定义列类型和优化渲染过程,进一步提升用户体验和系统响应速度。 ... [详细]
author-avatar
davidwzw2009413
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有