传送门

1.题意

给出n个数,要求给这些数分组,每组不少于k个。
每组的数之间的差不能大于d。是否能够分组?

2.dp分析

先排序。
f[i]f[i]f[i]表示[1~i]能够分组成功。
答案就是f[n]f[n]f[n]

如何更新?
举例:
n=12 k=3 d=2
1 2 3 9 10 11 12 13 14 15 15 15
当更新到b[11]b[11]b[11](15)时:
1.[8 ~ 11]能分成一组,如果[1 ~ 7]能够分组成功(f[7]f[7]f[7]=1),则[1 ~ 11]能够分组成功(f[11]f[11]f[11]=1)。(此时为b[11]右边界情况下,最后一组元素个数最多的情况)(b[8]是最小的,与b[11]差值小于d的元素)
2.[9 ~ 11]能分成一组,如果[1 ~ 8]能够分组成功(f[8]f[8]f[8]=1),则[1 ~ 11]能够分组成功(f[11]f[11]f[11]=1)。(此时为b[11]右边界情况下,最后一组元素个数最少的情况)(b[9],b[10],b[11],k个元素)
3.中间情况

推广:
对于位置i,如果f[t]~f[i-k+1]中有true,则f[i]为true。
t:与b[i]差值小于d的最小元素下标。
i-k+1:最小元素个数(k个)
(注意:t于i-k+1相对大小不固定,但是查询时(l>r)不影响结果)

优化:
树状数组c[N]c[N]c[N]

3.代码

#include <bits/stdc++.h>using namespace std;
//-----pre_def----
const double PI = acos(-1.0);
const int INF = 0x3f3f3f3f;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
#define fir(i, a, b) for (int i = (a); i <= (b); i++)
#define rif(i, a, b) for (int i = (a); i >= (b); i--)
#define endl '\n'
#define init_h memset(h, -1, sizeof h), idx = 0;
#define lowbit(x) x &(-x)//---------------
const int N = 5e5 + 10;
int n, k, d;
int b[N], f[N]; //f[i]==1~i能否成功
int c[N];       //树状数组优化dp
void add(int u, int k)
{for (int i = u; i <= n; i += lowbit(i)){c[i] += k;}
}
int sum(int u)
{int res = 0;for (int i = u; i; i -= lowbit(i)){res += c[i];}return res;
}
int main()
{#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);int StartTime = clock();
#endifscanf("%d%d%d", &n, &k, &d);fir(i, 1, n) scanf("%d", &b[i]);sort(b + 1, b + 1 + n);for (int i = k; i <= n; i++){if (b[i] - b[1] <= d)f[i] = 1;//初始化else{int tmp = lower_bound(b + 1, b + 1 + n, b[i] - d) - b - 1;if (sum(i - k) - sum(tmp - 1) > 0)f[i] = 1;}if (f[i])add(i, f[i]);}if (f[n])puts("YES");elseputs("NO");
#ifndef ONLINE_JUDGEprintf("Run_Time = %d ms\n", clock() - StartTime);
#endifreturn 0;
}

这题想了很久才想通,排版也很乱…
写给自己看的解题报告。

E. Pencils and Boxes (树状数组优化dp)相关推荐

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

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

  2. [SCOI2014]方伯伯的玉米田 //二维树状数组优化DP

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

  3. bzoj 1264: [AHOI2006]基因匹配Match (树状数组优化dp)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1264 思路: n大小为20000*5,而一般的dp求最长公共子序列复杂度是 n*n的,所以我 ...

  4. hdu 5542(树状数组优化dp)

    题意: 求n个数中长度为m的上升子序列的个数 解题思路:dp[i][j]表示第i个数长度为j的上升序列的个数.dp[i][j] = sum{dp[k][j-1] | a[k] < a[i]},这 ...

  5. acwing 297. 赤壁之战 树状数组优化DP 寒假集训

    题目链接 想要求长度为M的子序列,我们可以拿DP方程来计算,并且这个DP也是比较好看出来的DP[i][j]代表着i后j位置中的所有长度为j的子序列,递推方程为 for(int i=1;i<=n; ...

  6. hdu 4991(树状数组优化dp)

    Ordered Subsequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. CF1621G Weighted Increasing Subsequences(离散化+树状数组优化dp+栈维护后缀最大值+计数)

    problem luogu-link solution 显然单独考虑每个 iii 的贡献,即被多少个合法上升子序列包含. 令 x=max⁡{j∣j>i∧aj>ai}x=\max\{j\ | ...

  8. 【HDU - 6447】YJJ's Salesman(降维dp,树状数组优化dp)

    题干: YJJ is a salesman who has traveled through western country. YJJ is always on journey. Either is ...

  9. HDU 6447 YJJ's Salesman(树状数组优化DP + 离散化)

    HDU 6447 YJJ's Salesman 题目 给一个二维数组,从(0,0)走到(1e9, 1e9).每次只能走右,下,右下,三个方向.其中只有通过右下走到特定给出的点(村庄)时才会获得分值.问 ...

最新文章

  1. IBMX3650M3服务器8硬盘升级16硬盘的配置方法
  2. 洛谷P2401 不等数列(线性DP)
  3. 为C# Windows服务添加安装程序
  4. 山西上党残疾男子“只”手脱贫 带领村民增收
  5. JAVA对时间的几个处理小方法
  6. java jar apktool,ShakaApkTool.jar v3.0.0(反编译显示中文的apktool)下载
  7. Spring Cloud 与微服务学习总结(14)—— 云原生时代,如何从 Java 开发者转型微服务?
  8. error LNK2019: 无法解析的外部符号 问题1
  9. 22.客户端识别与 cookie 机制
  10. 北京大学软件与微电子学院嵌入式系统工程系
  11. 二、echarts地图从全国进省从省进市
  12. 施德来:有赞电商小程序的实践
  13. 【数据处理】xml的创建、读写问题
  14. 遥感影像去背景 之 数据裁剪
  15. 大数据实战|怎样实现大型电商热销榜?
  16. iMX8模块Ubuntu移植
  17. Linux zbar二维码识别库编译
  18. 什么教我们用计算机画画,家长如何教宝宝用电脑画画
  19. 我电脑感染了一种奇怪的病毒,它点中了我的笑穴!
  20. Redis核心技术-高可靠-集群方案(客户端分片、代理分片、Redis Cluster)

热门文章

  1. 〖Python 数据库开发实战 - Python与Redis交互篇⑩〗- 综合案例 - 新闻管理系统 - 发表新闻
  2. 【旧设备重获新生】--TL-WR842N V4.4路由器升级
  3. Apache2.4.6配置rewrite
  4. 用URL在IntentService中下载图片并更新到ImageView
  5. 求知若饥,虚心若愚——Stay Hungry, Stay Foolish
  6. elasticsearch安装与配置
  7. NX上配置TLD的环境---对opencv的版本没有要求
  8. 网络封包分析工具Charles(接口抓取)
  9. 中国电力集团公司旗下电厂分布
  10. 局域网聊天工具都有哪些?