题意:

有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. 20165225《Java程序设计》第四周学习总结

    20165225<Java程序设计>第四周学习总结 1.视频与课本中的学习: 继承(extends) 重写 对象的上转型对象 super final instanceof运算符 abstr ...

  2. JavaScript substr() 字符串截取函数使用详解

    substr 定义和用法 substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符. 语法 stringObject.substr(start,length) 如果 length ...

  3. JavaScript学习(七)

  4. 【JMeter】前置处理器

     BeanShell PreProcessor  使用BeanShell在请求进行之前进行操作.语法使用与BeanShell Sampler是一样的.但可使用的内置变量稍有不同    JDBC Pre ...

  5. IntelliJ配置SpringMVC提示“found:java.lang.String required:java.lang.String”

    File->Invalid Cache&Restart 据说Android Studio也会出现这个问题,但是没遇到过 重启环境后,找不到Controller的问题也解决了

  6. win10安装pycharm及汉化包

    PyCharm 是一款功能强大的 Python 编辑器,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,那么如何安装pycharm呢?都是英文看不懂有没有汉化版呢?跟ytkah一起 ...

  7. python安装提示ImportError: No module named web

    今天在开发一个项目时出现错误,重新安装了一下python和yum,然后面板就无法启动了,提示需要安装web依赖,但是具体是哪个web源呢,pip install web不行 Traceback (mo ...

  8. Codeforces Round #FF (Div. 2) 题解

    比赛链接:http://codeforces.com/contest/447 A. DZY Loves Hash time limit per test 1 second memory limit p ...

  9. 前端开发---HTML---介绍

    阅读目录 1.标签 2.HTML目录结构 3.HTML注释 一.web1.0时代的网页制作 静态网页,所谓的静态网页就是没有与用户进行交互而仅仅供读者浏览的网页,我们当时称为“牛皮癣”网页.例如一篇Q ...

  10. [django]restfulapi请求规范

    http://www.ruanyifeng.com/blog/2014/05/restful_api.html 方法及作用: GET(SELECT) :从服务器取出资源(一项或多项). POST(CR ...