博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Minimizing Maximizer
阅读量:4987 次
发布时间:2019-06-12

本文共 1375 字,大约阅读时间需要 4 分钟。

题意:

最少需要多少个区间能完全覆盖整个区间[1,n]

分析:

dp[i]表示覆盖[1,i]最少需要的区间数,对于区间[a,b],dp[b]=min(dp[a...b-1])+1;用线段树来维护区间最小值。

#include #include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef pair
PII;typedef long long ll;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define All 1,N,1#define N 50010#define read freopen("in.txt", "r", stdin)const ll INFll = 0x3f3f3f3f3f3f3f3fLL;const int INF= 0x7ffffff;const int mod = 1000000007;struct seg{ int s,e;}g[N*10];int minv[N*4],n,q;void pushup(int rt){ minv[rt]=min(minv[rt<<1],minv[rt<<1|1]);}void build(int l,int r,int rt){ if(l==r){ if(l==1)minv[rt]=0; else minv[rt]=INF; return; } int m=(l+r)>>1; build(lson); build(rson); pushup(rt);}void update(int p,int l,int r,int rt,int v){ if(l==r){ minv[rt]=min(minv[rt],v); return; } int m=(l+r)>>1; if(p<=m)update(p,lson,v); else update(p,rson,v); pushup(rt);}int query(int L,int R,int l,int r,int rt){ if(l>=L&&r<=R) return minv[rt]; int tmp=INF; int m=(l+r)>>1; if(L<=m)tmp=min(tmp,query(L,R,lson)); if(R>m)tmp=min(tmp,query(L,R,rson)); return tmp;}int main(){ int t; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&q); for(int i=0;i

 

转载于:https://www.cnblogs.com/zsf123/p/4909767.html

你可能感兴趣的文章
671. Second Minimum Node In a Binary Tree 非递减二叉树中第二小的元素
查看>>
747. Largest Number At Least Twice of Others比所有数字都大两倍的最大数
查看>>
105. Construct Binary Tree from Preorder and Inorder Traversal根据前中序数组恢复出原来的树...
查看>>
MS-SQL Server [摘改]
查看>>
实验五 6 6
查看>>
进阶攻略|前端最全的框架总结
查看>>
网站二次开发的总结
查看>>
把手账打印成书 把回忆装订成册
查看>>
洛谷P4116 Qtree3
查看>>
洛谷 P1195 口袋的天空
查看>>
网络协议
查看>>
网络基础之网络协议
查看>>
Jzoj3528 图书馆
查看>>
daemon虚拟光驱
查看>>
Java基础__Integer类型中的自动装箱
查看>>
头文件包含方式
查看>>
C# 日志系统 log4net 配置及使用
查看>>
JavaScript获取当前url路径
查看>>
Python_正则(re.math()的简单说明)
查看>>
Base64编码简介
查看>>