题意:

有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. jetty在eclipse和Idea中的使用

    eclipse中的配置 下载 http://www.eclipse.org/jetty/download.html 下载保存到特定的位置,解压. 整合到eclipse中 这里通过在eclipse中安装 ...

  2. IE报错:[vuex] vuex requires a Promise polyfill in this browser.

    使用的是vue2.0版本 IE报错提醒: 导致原因:使用了 ES6 中用来传递异步消息的的Promise,而IE的浏览器不支持 解决办法: 1.安装babel-polyfill模块,babel-plo ...

  3. 【Jmeter】if控制器+循环控制器+计数器,控制接口分支

    但是我不想这么做,接口只想写一次,让循环控制器和if控制器去判断接口,执行我想要的分支.这里遇到了一个问题,if控制器通过什么去判断接下来的分支?我引入了一个计数器的概念.起始值为0,每次循环加1,将 ...

  4. Magento 2数据库EAV模型结构

     EAV模型是一种数据模型 ,用于描述实体的数量预计会很大,但事实上,实体中要使用的属性数量并不多. Magento 2这么设计是为了灵活性,在不影响主干的基础上,任意新增删除属性. EAV模型(E ...

  5. 爬虫解析库——BeautifulSoup

    解析库就是在爬虫时自己制定一个规则,帮助我们抓取想要的内容时用的.常用的解析库有re模块的正则.beautifulsoup.pyquery等等.正则完全可以帮我们匹配到我们想要住区的内容,但正则比较麻 ...

  6. mysql在linux上的安装

    前提: 环境:workstation 11 + CentOS 7 + mysql-5.6.40 安装前先查看服务器里是否有老版本的mysql已经被安装了 rpm -qa|grep mysql 如果有就 ...

  7. 为什么char *name="it",printf("%s",name) 能够输出字符串?

    “it”里面是3个字符  “i”“t”“/0”,%s会打印指针指向的字符就是“i”,知道遇到“/0”停止,所以打印出来是“it”

  8. abap 通过importing 和 exporting 调用其它函数

    1:其它函数的(输入或输出)参数名都在=号左边.

  9. 安装ElasticSearch5.5.2 注意事项

    官方文档中建议生产环境中打开 bootstrap.memory_lock: true 打开之后会报很多错误要优化一下系统参数 vim /etc/security/limits.conf * soft ...

  10. 16个PHP设计模式详解

    说明:该教程全部截选自实验楼教程[16个PHP设计模式详解]:主要介绍16个常用的设计模式的基础概念和技术要点,通过UML类图帮助理解设计模式中各个类之间的关联关系,针对每种设计模式都使用PHP完成了 ...