题意:

有n个数,m个排序器,每个排序器可以把区间ai到bi的数从小到大排序。这m个排序器的输出就是m个排序之后的第n个数。

现在发现有些排序器是多余的。问至少需要多少个排序器可以使得输出不变。排序器的顺序不可以改变。

思路:

这题并没有说这些排序器可以覆盖1到n的所有区间。。。

假设可以,那么就是求最少的区间可以覆盖1到n。

用dp[i]表示覆盖第i个数需要的最少区间数,dp[i] = min(dp[i],dp[s] + 1) ai <= s <= b[i]。

如果单纯的枚举ai到bi,那么时间复杂度为n*m,肯定会t。

找一个区间的最小值,可以想到线段树,所以就用线段树来优化dp,单点查询,单点更新。

注意dp[1] = 0,并且也要在线段树中进行更新。

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 5e4 + ;
const int inf = 0x3f3f3f3f;
int a[N<<];
int modi[N<<];
int dp[N];
void pushup(int rt)
{
a[rt] = min(a[rt<<],a[rt<<|]);
}
void build(int rt,int l,int r)
{
if (l == r)
{
a[rt] = inf;
return;
}
int mid = (l + r) >> ;
build(rt << ,l,mid);
build(rt << |,mid + ,r);
pushup(rt);
}
int query(int rt,int l,int r,int L,int R)
{
if (l >= L && r <= R)
{
return a[rt];
}
int mid = (l + r) >> ;
int r1 = inf,r2 = inf;
if (L <= mid) r1 = query(rt << ,l,mid,L,R);
if (R > mid) r2 = query(rt << |,mid + ,r,L,R);
return min(r1,r2);
}
void update(int rt,int l,int r,int p,int v)
{
if (l == r)
{
a[rt] = v;
return;
}
int mid = (l + r) >> ;
if (p <= mid) update(rt << ,l,mid,p,v);
else update(rt << |,mid + ,r,p,v);
pushup(rt);
}
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
int n,m;
memset(dp,inf,sizeof(dp));
memset(modi,-,sizeof(modi));
scanf("%d%d",&n,&m);
build(,,n);
dp[] = ;
update(,,n,,dp[]);
for (int i = ;i < m;i++)
{
int l,r;
scanf("%d%d",&l,&r);
int k = query(,,n,l,r);
dp[r] = min(dp[r],k+);
update(,,n,r,dp[r]);
}
printf("%d\n",dp[n]);
if (t) puts("");
}
return ;
}
/*
1
40 6
20 30
1 10
10 20
20 30
15 25
30 40
*/

uva 1322 Minimizing Maximizer的更多相关文章

  1. Minimizing maximizer(POJ 1769)

    原题如下: Minimizing maximizer Time Limit: 5000MS   Memory Limit: 30000K Total Submissions: 5104   Accep ...

  2. POJ1769 Minimizing maximizer(DP + 线段树)

    题目大概就是要,给一个由若干区间[Si,Ti]组成的序列,求最小长度的子序列,使这个子序列覆盖1到n这n个点. dp[i]表示从第0个到第i个区间且使用第i个区间,覆盖1到Ti所需的最少长度 对于Si ...

  3. poj 1769 Minimizing maximizer 线段树维护dp

    题目链接 给出m个区间, 按区间给出的顺序, 求出覆盖$ [1, n] $ 至少需要多少个区间. 如果先给出[10, 20], 在给出[1, 10], 那么相当于[10, 20]这一段没有被覆盖. 令 ...

  4. POJ.1769.Minimizing maximizer(线段树 DP)

    题目链接 /* 题意:有m个区间,问最少要多少个区间能覆盖[1,n] 注:区间要按原区间的顺序,不能用排序贪心做 设dp[i]表示最右端端点为i时的最小值 dp[e[i]]=min{dp[s[i]]~ ...

  5. UVA-1322 Minimizing Maximizer (DP+线段树优化)

    题目大意:给一个长度为n的区间,m条线段序列,找出这个序列的一个最短子序列,使得区间完全被覆盖. 题目分析:这道题不难想,定义状态dp(i)表示用前 i 条线段覆盖区间1~第 i 线段的右端点需要的最 ...

  6. poj1769 Minimizing maximizer

    传送门 题目大意 给你m个机器,n个数,每个机器可以给n个数的某一段排序,求最少使用几个机器,保证可以把这个n个数排好序 分析 我们可以想到dpij表示考虑前i个机器让最大的数到达点j至少需要使用多少 ...

  7. POJ 1769 Minimizing maximizer(DP+zkw线段树)

    [题目链接] http://poj.org/problem?id=1769 [题目大意] 给出一些排序器,能够将区间li到ri进行排序,排序器按一定顺序摆放 问在排序器顺序不变的情况下,一定能够将最大 ...

  8. POJ 1769 Minimizing maximizer (线段树优化dp)

    dp[i = 前i中sorter][j = 将min移动到j位置] = 最短的sorter序列. 对于sorteri只会更新它右边端点r的位置,因此可以把数组改成一维的,dp[r] = min(dp[ ...

  9. Minimizing Maximizer

    题意: 最少需要多少个区间能完全覆盖整个区间[1,n] 分析: dp[i]表示覆盖[1,i]最少需要的区间数,对于区间[a,b],dp[b]=min(dp[a...b-1])+1;用线段树来维护区间最 ...

随机推荐

  1. 1、python接口测试requests

    import requestsimport jsonr=requests.get('http://www.baidu.com')                        #get 请求方式r=r ...

  2. dwr的ScriptSession和HttpSession分析

    1.关于ScriptSession ScriptSession不会与HttpSession同时创建 当我们访问一个页面的时候,如果是第一次访问,会创建一个新的HttpSession,之后再访问的时候, ...

  3. android常用函数

    package com.cqytjr.util; import java.io.File; import java.net.InetAddress; import java.net.NetworkIn ...

  4. 实现web消息推送的技术和采用长轮询corundumstudio介绍

    实时消息的推送,PC端的推送技术可以使用socket建立一个长连接来实现.传统的web服务都是客户端发出请求,服务端给出响应.但是现在直观的要求是允许特定时间内在没有客户端发起请求的情况下服务端主动推 ...

  5. SQL Server 安装好后 Always On群组配置

    需要对SQL Server必要的端口打开Windows防火墙的入站规则,比如TCP- 1433端口等. 特别注意:由于AG默认需要用到TCP-5022端口,所以该端口务必保证在Windows防火墙中开 ...

  6. Python3学习之路~6.4 析构函数

    析构函数是在实例释放.销毁的时候执行的,通常用于做一些收尾工作.比如说,关闭一些数据库连接.打开的临时文件等. #Author:Zheng Na class Role: # 构造函数 def __in ...

  7. grub启动流程和配置

    grub stage  1 MBR中前 446个字节,如果把这里面的内容损坏,那么系统会认为当前磁盘没有启动引导功能,会尝试从光盘或者网络启动系统 grub  stage  1.5 存放识别/boot ...

  8. Redis入门到高可用(八)——list

    一.结构 key - value 结构,value是一个有序队列. 可进行左边的添加及弹出,右边的添加及弹出. 可获取列表的长度,删除列表中指定元素,获取列表的子列表,按照索引获取列表的指定元素. 特 ...

  9. 前端框架之Vue(10)-全家桶简单使用实例

    vue-router官方文档 vuex官方文档 安装 npm install vue-router --save 使用实例 vue-router初使用(webpack-simple模板) 1.切换到指 ...

  10. 解决npm ERR! Unexpected end of JSON input while parsing near的方法汇总

    参考链接:https://segmentfault.com/a/1190000015646531