发现每一次 $[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 动态规划+树状数组的更多相关文章

  1. 【bzoj1109】[POI2007]堆积木Klo 动态规划+树状数组

    题目描述 Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置 ...

  2. [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)

    [BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...

  3. A Simple Problem with Integers_树状数组

    Problem Description Let A1, A2, ... , AN be N elements. You need to deal with two kinds of operation ...

  4. A Simple Problem with Integers(树状数组HDU4267)

    A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (J ...

  5. 2015 CCPC-C-The Battle of Chibi (UESTC 1217)(动态规划+树状数组)

    赛后当天学长就说了树状数组,结果在一个星期后赖床时才有了一点点思路…… 因为无法提交,不确定是否正确..嗯..有错希望指出,谢谢... 嗯..已经A了..提交地址http://acm.uestc.ed ...

  6. POJ3468 A Simple Problem with Interger [树状数组,差分]

    题目传送门 A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 1 ...

  7. HDU 4267 A Simple Problem with Integers --树状数组

    题意:给一个序列,操作1:给区间[a,b]中(i-a)%k==0的位置 i 的值都加上val  操作2:查询 i 位置的值 解法:树状数组记录更新值. 由 (i-a)%k == 0 得知 i%k == ...

  8. POJ3468 A Simple Problem With Integers 树状数组 区间更新区间询问

    今天学了很多关于树状数组的技巧.一个是利用树状数组可以简单的实现段更新,点询问(二维的段更新点询问也可以),每次修改只需要修改2个角或者4个角就可以了,另外一个技巧就是这题,原本用线段树做,现在可以用 ...

  9. luogu 2154 离散化+杨辉三角+树状数组

    将纵向固定,每次在横向找两个点,计算其中间墓地的贡献答案,离散化后同一行的预处理个数, 树状数组内存储C[up[i]][k] * C[down[i][k] 的值,每次更新时 down[横坐标]++; ...

随机推荐

  1. 适合新手的160个creakme(三)

    先跑一下,这个程序应该是有定时器,多久之后自动开启,测试一下输入,序列号以字母方式输入会出现类型不匹配,之后程序自动退出 但是如果以数字方式输入序列号,则会出现,Try Again,所以这里序列号应该 ...

  2. 转载博客(Django2.0集成xadmin管理后台遇到的错误)

    转载博客地址:https://blog.csdn.net/yuezhuo_752/article/details/87916995 django默认是有一个admin的后台管理模块,但是丑,功能也不齐 ...

  3. async/await 的引用

    static async void Start() { string s = "ass"; Console.WriteLine(getMemory(s)+"Hello W ...

  4. java怎么解除文件占用(Dom4j操作完xml后怎么关流)

    一.背景 项目中要解析xml,由于Dom4j的诸多优点,我就用Dom4j解析xml,代码如下: public void readXML() { SAXReader reader = new SAXRe ...

  5. Newtonsoft.Json基本用法

    1.将一个 Object 序列化成 JSON: DataSet detail = sqlDB.GetDataSet(string.Format("select * from student ...

  6. 如何对Nginx日志文件进行切割保存

    日积月累下,日志文件会越来越大,日志文件太大严重影响服务器效率,须要定时对日志文件进行切割. 切割的方式有按月切割.按天切割.按小时切割,一般都是按天切割. 那么如何进行切割呢? 思路: 创建日志文件 ...

  7. python3 中的cls和self的区别 静态方法和类方法的区别

      一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某 ...

  8. Win10系统升级更新方式将会更智能

    使用Win10系统的你肯定遇到过在工作时开始自动更新而不得不搁置工作的情况,想必你也已经被Win10系统的自动更新折磨不已,不过这种情况将会马上得到改观. 微软现在已经开始寻找更智能的版本升级更新方式 ...

  9. Flutter——Column组件(垂直布局组件)

    Column组件的常用属性 属性 说明 mainAxisAlignment 主轴的排序方式 crossAxisAlignment 次轴的排序方式 children 组件子元素 import 'pack ...

  10. web开发:形变、表格及多行文本操作

    一.2d形变 二.动画 三.表格 四.多个文本垂直居中 五.小米形变案例 一.2d形变 /*1.形变参考点: 三轴交界点*/transform-origin: x轴坐标 y轴坐标; /*2.旋转 ro ...