POJ.1769.Minimizing maximizer(线段树 DP)
/*
题意:有m个区间,问最少要多少个区间能覆盖[1,n]
注:区间要按原区间的顺序,不能用排序贪心做
设dp[i]表示最右端端点为i时的最小值
dp[e[i]]=min{dp[s[i]]~dp[e[i]-1]}+1
注意修改只需要修改右端点,不需要修改一段
所以线段树查询区间最小值即可
*/
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
#define gc() getchar()
//#define gc() (TT==SS &&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),TT==SS)?EOF:*SS++)
const int N=5e4+5,MAXIN=1e7,INF=0x3f3f3f3f;
int n,m,f[N];
char IN[MAXIN],*SS=IN,*TT=IN;
struct Seg_Tree
{
int tot;
struct Node
{
int l,r,val,ls,rs;
}node[N<<1];
inline void PushUp(int rt)
{
node[rt].val=std::min(node[node[rt].ls].val,node[node[rt].rs].val);
}
void Build(int l,int r)
{
int p=tot++;
node[p].l=l, node[p].r=r;
if(l==r){ node[p].ls=node[p].rs=-1,node[p].val=f[l]; return;}
int m=l+r>>1;
node[p].ls=tot, Build(l,m);
node[p].rs=tot, Build(m+1,r);
PushUp(p);
// printf("%d:l:%d r:%d val:%d\n",p,l,r,node[p].val);
}
void Modify(int rt,int pos,int v)
{
if(node[rt].l==node[rt].r)
{
node[rt].val=v; return;
}
int m=node[rt].l+node[rt].r>>1;
if(pos<=m) Modify(node[rt].ls,pos,v);
else Modify(node[rt].rs,pos,v);
PushUp(rt);
}
int Query(int rt,int L,int R)
{
if(L<=node[rt].l && node[rt].r<=R) return node[rt].val;
int m=node[rt].l+node[rt].r>>1;
if(L<=m)
if(m<R) return std::min(Query(node[rt].ls,L,R),Query(node[rt].rs,L,R));
else return Query(node[rt].ls,L,R);
else if(m<R) return Query(node[rt].rs,L,R);
}
}t;
inline int read()
{
int now=0,f=1;register char c=gc();
for(;!isdigit(c);c=gc()) if(c=='-') f=-1;
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now*f;
}
int main()
{
n=read(),m=read();
memset(f,0x3f,sizeof f);
f[1]=0;
t.Build(1,n);
int l,r,tmp;
while(m--)
{
l=read(),r=read();
if(f[r]>(tmp=t.Query(0,l,r-1)+1))
f[r]=tmp, t.Modify(0,r,tmp);
}
printf("%d",f[n]);
return 0;
}
POJ.1769.Minimizing maximizer(线段树 DP)的更多相关文章
- poj 1769 Minimizing maximizer 线段树维护dp
题目链接 给出m个区间, 按区间给出的顺序, 求出覆盖$ [1, n] $ 至少需要多少个区间. 如果先给出[10, 20], 在给出[1, 10], 那么相当于[10, 20]这一段没有被覆盖. 令 ...
- POJ 1769 Minimizing maximizer(DP+zkw线段树)
[题目链接] http://poj.org/problem?id=1769 [题目大意] 给出一些排序器,能够将区间li到ri进行排序,排序器按一定顺序摆放 问在排序器顺序不变的情况下,一定能够将最大 ...
- POJ 1769 Minimizing maximizer (线段树优化dp)
dp[i = 前i中sorter][j = 将min移动到j位置] = 最短的sorter序列. 对于sorteri只会更新它右边端点r的位置,因此可以把数组改成一维的,dp[r] = min(dp[ ...
- POJ 2750 Potted Flower(线段树+dp)
题目链接 虽然是看的别的人思路,但是做出来还是挺高兴的. 首先求环上最大字段和,而且不能是含有全部元素.本来我的想法是n个元素变为2*n个元素那样做的,这样并不好弄.实际可以求出最小值,总和-最小,就 ...
- Tsinsen A1219. 采矿(陈许旻) (树链剖分,线段树 + DP)
[题目链接] http://www.tsinsen.com/A1219 [题意] 给定一棵树,a[u][i]代表u结点分配i人的收益,可以随时改变a[u],查询(u,v)代表在u子树的所有节点,在u- ...
- HDU 3016 Man Down (线段树+dp)
HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- POJ 2376 Cleaning Shifts (线段树优化DP)
题目大意:给你很多条线段,开头结尾是$[l,r]$,让你覆盖整个区间$[1,T]$,求最少的线段数 题目传送门 线段树优化$DP$裸题.. 先去掉所有能被其他线段包含的线段,这种线段一定不在最优解里 ...
- POJ 3415 Max Sum of Max-K-sub-sequence (线段树+dp思想)
Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- lightoj1085 线段树+dp
//Accepted 7552 KB 844 ms //dp[i]=sum(dp[j])+1 j<i && a[j]<a[i] //可以用线段树求所用小于a[i]的dp[j ...
随机推荐
- Java探针-Java Agent技术-阿里面试题
Java探针参考:Java探针技术在应用安全领域的新突破 最近面试阿里,面试官先是问我类加载的流程,然后问了个问题,能否在加载类的时候,对字节码进行修改 我懵逼了,答曰不知道,面试官说可以的,使用Ja ...
- 关于python中的类方法(classmethod)和静态方法(staticmethod)
首先明确两点: a)python在创建类的时候,self指向的是类的实例而不是类属性! b)我们所创建的类的方法有两种作用,一种是改变类的属性,一种是改变实例的属性,这点一定要分清! c)我们在调用类 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(4)- 其它
1. 前言 2.可配置的指令使能/禁用控制和trap控制 指令使能/禁用 当指令被禁用,则这条指令就会变成未定义 指令Trap控制 控制某条或某些指令在运行时进入陷阱,进入陷阱的指令会产生trap异常 ...
- malloc()函数(Linux程序员手册)及函数的正确使用【转】
转自:https://blog.csdn.net/david_xtd/article/details/7311204 名称 malloc,free,calloc,realloc--分配和释放动态内存 ...
- 出现“error LNK1169: 找到一个或多个多重定义的符号”的原因
或许,有人真的会这样写程序吧...所以才会碰到如下哥们提出的问题. https://zhidao.baidu.com/question/131426210.html 出现这种问题的原因链接中的最佳答案 ...
- VS C# xamarin 开发android 调试正常 发布分发后运行闪退出错
我强烈推荐大家如果不是很有必要就不要引用一些.NET STD的库,比如json库newtonsoft.JSON,直接引用官方的system.Json就足够了,否则会导致体积变得巨大 好了废话不多说,这 ...
- expdp和impdp 使用注意事项
使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用, ...
- 集合List和ArrayList的示例
package chapter09; import java.util.ArrayList;import java.util.List; /* * List * ArrayList底层是数组 * 特点 ...
- Mac 下 Redis 5.0 的卸载与安装
卸载 停止 redis 服务器 redis-cli shutdown 检测 #检测后台进程是否存在 ps -ef |grep redis #检测6379端口是否在监听 netstat -lntp | ...
- 08 IO库
#include<iostream> #include<vector> #include<string> #include<fstream> using ...