luogu 2519 [HAOI2011]problem a 动态规划+树状数组
发现每一次 $[b[i]+1,n-a[i]]$ 这个区间的分数必须相同,否则不合法.
而一个相同的区间 $[l,r]$ 最多只能出现区间长度次.
于是,就得到了一个 $dp:$ 将每一种区间的出现次数看作是价值,要选出若干个互不相交的区间使得价值最大.
这个直接用树状数组优化 dp 跑一下就行了~
#include <bits/stdc++.h>
#define N 100004
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,C[N],f[N];
struct P
{
int l,r,v;
P(int l=0,int r=0,int v=0):l(l),r(r),v(v){}
}p[N],g[N];
bool cmp(P a,P b)
{
return a.l==b.l?a.r<b.r:a.l<b.l;
}
bool cmp2(P a,P b)
{
return a.r<b.r;
}
int lowbit(int t)
{
return t&(-t);
}
void update(int x,int d)
{
for(;x<N;x+=lowbit(x)) C[x]=max(C[x], d);
}
int query(int x)
{
int tmp=0;
for(;x>0;x-=lowbit(x)) tmp=max(tmp, C[x]);
return tmp;
}
int main()
{
int i,j,tot=0;
// setIO("input");
scanf("%d",&n);
for(i=1;i<=n;++i)
{
int a,b,l,r;
scanf("%d%d",&a,&b);
l=b+1,r=n-a;
if(l<=r)
{
p[++tot]=P(l,r,0);
}
}
sort(p+1,p+1+tot,cmp);
int pp=0,mx=0;
for(i=1;i<=tot;i=j)
{
++pp;
g[pp]=p[i];
for(j=i;j<=tot&&p[j].l==p[i].l&&p[j].r==p[i].r;++j)
{
++g[pp].v;
}
g[pp].v=min(g[pp].v, g[pp].r-g[pp].l+1);
}
sort(g+1,g+1+pp,cmp2);
for(i=1;i<=pp;++i)
{
// printf("%d %d %d\n",g[i].l,g[i].r,g[i].v);
f[i]=g[i].v+query(g[i].l-1);
update(g[i].r, f[i]);
mx=max(mx, f[i]);
}
printf("%d\n",n-query(n));
return 0;
}
luogu 2519 [HAOI2011]problem a 动态规划+树状数组的更多相关文章
- 【bzoj1109】[POI2007]堆积木Klo 动态规划+树状数组
题目描述 Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置 ...
- [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)
[BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...
- A Simple Problem with Integers_树状数组
Problem Description Let A1, A2, ... , AN be N elements. You need to deal with two kinds of operation ...
- A Simple Problem with Integers(树状数组HDU4267)
A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- 2015 CCPC-C-The Battle of Chibi (UESTC 1217)(动态规划+树状数组)
赛后当天学长就说了树状数组,结果在一个星期后赖床时才有了一点点思路…… 因为无法提交,不确定是否正确..嗯..有错希望指出,谢谢... 嗯..已经A了..提交地址http://acm.uestc.ed ...
- POJ3468 A Simple Problem with Interger [树状数组,差分]
题目传送门 A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 1 ...
- HDU 4267 A Simple Problem with Integers --树状数组
题意:给一个序列,操作1:给区间[a,b]中(i-a)%k==0的位置 i 的值都加上val 操作2:查询 i 位置的值 解法:树状数组记录更新值. 由 (i-a)%k == 0 得知 i%k == ...
- POJ3468 A Simple Problem With Integers 树状数组 区间更新区间询问
今天学了很多关于树状数组的技巧.一个是利用树状数组可以简单的实现段更新,点询问(二维的段更新点询问也可以),每次修改只需要修改2个角或者4个角就可以了,另外一个技巧就是这题,原本用线段树做,现在可以用 ...
- luogu 2154 离散化+杨辉三角+树状数组
将纵向固定,每次在横向找两个点,计算其中间墓地的贡献答案,离散化后同一行的预处理个数, 树状数组内存储C[up[i]][k] * C[down[i][k] 的值,每次更新时 down[横坐标]++; ...
随机推荐
- Let's Code
Let's Code Happy Coding, Happy OI #include <bits/stdc++.h> using namespace std; int main() { c ...
- go语言操作kafka
go语言操作kafka Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能.持久化.多副本备份.横向扩展等特点.本文介绍了如何使用Go语言发送和 ...
- 采样方法(二)MCMC相关算法介绍及代码实现
采样方法(二)MCMC相关算法介绍及代码实现 2017-12-30 15:32:14 Dark_Scope 阅读数 10509更多 分类专栏: 机器学习 版权声明:本文为博主原创文章,遵循CC 4 ...
- docker 入门6 - 部署 【翻译】
开始,第 6 部分:部署应用 先决条件 安装 Docker. 获取第 3 部分先决条件中所述的 Docker Compose. 获取 Docker Machine,如第 4 部分先决条件中所述. 阅读 ...
- C#数字前补0
[TestMethod] public void Test8() { ; string b = string.Format("{0:000000}", a); , '); }
- ORACLE通过JOB定时创建序列
http://blog.csdn.net/cuihaiyang/article/details/7872982 因为业务需要每月需要增加一个序列,想到了使用job定时创建,每次创建一年的.写此job的 ...
- ubuntu14 vim编译
(1) ./configure --prefix=/usr (2) make VIMRCLOC=/etc/vim VIMRUNTIMEDIR=/usr/share/vim/vim74 MAKE=&qu ...
- 14 Django之Form和Model Form组件
一.什么是Form 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用 ...
- element随笔
时间选择框el-date-picker和select框数据选不上: [解决]用v-model="searchData.searchDate",不能用:model="sea ...
- JS-闭包练习
首先,第一个输出,因为前置运算,i要先参与输出,然后再自增,所以输出为0 第二个输出,因为f1和f2是不同的函数,不共享i变量,所以输出也为0 第三个输出,因为是f1,共享i,所以i加了1,输出为1 ...