1. /*
  2. dp[i]=0|1 表示前i是否可以被成功分组,
  3. dp[i+1]能够变成1的三个条件
  4. 1:j∈[0,i-k]里存在dp[j]=1
  5. 2:dp[j]=1
  6. 3:a[i+1]-a[j+1]<=d
  7. 即可以把[j+1,i+1]分为一组,放在前j个之后
  8. 先进行排序,暴力的复杂度是o(n*n)
  9. 其实每次求dp[i]时,只要考虑区间[pos,i-k]的dp即可,pos为第一个比a[i]-d小的坐标再-1(为什么要-1,因为新的段是接在前面的段后面,所以其实是从a[i]-d的前面开始算起)
  10. */
  11. #include<bits/stdc++.h>
  12. using namespace std;
  13. #define maxn 5000005
  14.  
  15. int d,dp[maxn],a[maxn],n,k;
  16.  
  17. int bit[maxn];
  18. void update(int x,int v){
  19. while(x<=n){
  20. bit[x]+=v;
  21. x+=(x&-x);
  22. }
  23. }
  24. int query(int x){
  25. int res=;
  26. while(x){
  27. res+=bit[x];
  28. x-=(x&-x);
  29. }
  30. return res;
  31. }
  32.  
  33. int main(){
  34. cin>>n>>k>>d;
  35. for(int i=;i<=n;i++)cin>>a[i];
  36. sort(a+,a++n);
  37.  
  38. for(int i=;i<=n;i++){
  39. if(i<k)dp[i]=;
  40. else if(a[i]-a[]<=d)dp[i]=;
  41. else {
  42. int pos=lower_bound(a+,a++n,a[i]-d)-a-;//这里要注意一下
  43. dp[i]=(query(i-k)-query(pos-))>;
  44. }
  45. if(dp[i])update(i,);
  46. }
  47. if(dp[n])puts("YES");
  48. else puts("NO");
  49. }

树状数组优化dp——cf985E经典的更多相关文章

  1. HDU 6240 Server(2017 CCPC哈尔滨站 K题,01分数规划 + 树状数组优化DP)

    题目链接  2017 CCPC Harbin Problem K 题意  给定若干物品,每个物品可以覆盖一个区间.现在要覆盖区间$[1, t]$. 求选出来的物品的$\frac{∑a_{i}}{∑b_ ...

  2. Codeforces 946G Almost Increasing Array (树状数组优化DP)

    题目链接   Educational Codeforces Round 39 Problem G 题意  给定一个序列,求把他变成Almost Increasing Array需要改变的最小元素个数. ...

  3. LUOGU P2344 奶牛抗议 (树状数组优化dp)

    传送门 解题思路 树状数组优化dp,f[i]表示前i个奶牛的分组的个数,那么很容易得出$f[i]=\sum\limits_{1\leq j\leq i}f[j-1]*(sum[i]\ge sum[j- ...

  4. 【题解】Music Festival(树状数组优化dp)

    [题解]Music Festival(树状数组优化dp) Gym - 101908F 题意:有\(n\)种节目,每种节目有起始时间和结束时间和权值.同一时刻只能看一个节目(边界不算),在所有种类都看过 ...

  5. 【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)

    [题解]ARC101F Robots and Exits(DP转格路+树状数组优化DP) 先删去所有只能进入一个洞的机器人,这对答案没有贡献 考虑一个机器人只能进入两个洞,且真正的限制条件是操作的前缀 ...

  6. Codeforces 909C Python Indentation:树状数组优化dp

    题目链接:http://codeforces.com/contest/909/problem/C 题意: Python是没有大括号来标明语句块的,而是用严格的缩进来体现. 现在有一种简化版的Pytho ...

  7. BZOJ3594: [Scoi2014]方伯伯的玉米田【二维树状数组优化DP】

    Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美. 这排玉米一共有N株,它们的高度参差不齐. 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感 ...

  8. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

  9. BZOJ 3594: [Scoi2014]方伯伯的玉米田 (二维树状数组优化DP)

    分析 首先每次增加的区间一定是[i,n][i,n][i,n]的形式.因为如果选择[i,j](j<n)[i,j](j<n)[i,j](j<n)肯定不如把后面的全部一起加111更优. 那 ...

随机推荐

  1. java如何生成一个0-100的随机整数?

    public class Test {public static void main(String[] args) {int num=(int)(Math.random()*101);System.o ...

  2. Redux DevTools Extension 的使用

    网址  https://github.com/zalmoxisus/redux-devtools-extension 1.const composeEnhancers = window.__REDUX ...

  3. Delphi 堆栈 [ heap(堆) 和 stack(栈) ]

    程序需要的内存空间分为 heap(堆) 和 stack(栈); heap(堆) 是自由存储区, stack(栈) 是自动存储区; 使用 heap 需要手动申请.手动释放, 使用 stack 是自动申请 ...

  4. Java实体与Json操作类

    import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.Jav ...

  5. microservice-cloud-03-provider-product-8001

    server:  port: 8001 mybatis:  config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置文 ...

  6. 谈谈-Android Studio 调试功能

    先编译好要调试的程序. 1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可. 2.开启调试会话 点击红色箭头指向的小虫子,开始进入调试. IDE下方出现Debug视图,红色的箭头指 ...

  7. Sleepy与DbgHlp库学习

    参考:http://msdn.microsoft.com/en-us/library/windows/desktop/ms679291(v=vs.85).aspx http://msdn.micros ...

  8. Django框架(十)—— 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询、聚合查询、分组查询、F查询与Q查询

    目录 多表操作:增删改,基于对象/双下划线的跨表查询.聚合查询.分组查询.F查询与Q查询 一.创建多表模型 二.一对多增删改表记录 1.一对多添加记录 2.一对多删除记录 3.一对多修改记录 三.一对 ...

  9. JUC源码分析-线程池篇(三)ScheduledThreadPoolExecutor

    JUC源码分析-线程池篇(三)ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor 继承自 ThreadPoolExecutor.它主要用来在 ...

  10. Linux 下通过mail命令发送邮件

    mail -s "测试"  1968089885@foxmail.com 需要先配置smtp服务器