正题


题目大意

给出一个长度为nnn的序列aaa和数字lll,定义两个长度为lll的区间[l1,r1][l_1,r_1][l1​,r1​]和[l2,r2][l_2,r_2][l2​,r2​]的距离为有多少个不相同的数字。

然后有qqq个询问kik_iki​,要求输出有多少对距离为kik_iki​的区间。


解题思路

我们发现若我们求出了[l1,r1][l_1,r_1][l1​,r1​]和[l2,r2][l_2,r_2][l2​,r2​]的距离,就可以O(1)O(1)O(1)求出[l1+1,r1+1][l_1+1,r_1+1][l1​+1,r1​+1]和[l2+1,r2+1][l_2+1,r_2+1][l2​+1,r2​+1]的距离(两个ififif即可)。

我们可以枚举计算的区间对的位置差

所以我们可以用ansi,jans_{i,j}ansi,j​表示区间[i,i+l−1][i,i+l-1][i,i+l−1]有多少个与其距离为jjj的区间。然后做个前缀和即可。

时空间复杂度都是O(n2)O(n^2)O(n2)。我们发现空间复杂度并不能胜任,所以我们可以将ansi,jans_{i,j}ansi,j​的jjj的意义变为有多少个与其距离为kjk_jkj​的区间。

然后空间复杂度O(nq)O(nq)O(nq)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=11000;
int n,q,a[N],x[N],num[N],ans[N][110],L;
bool v[N];
int main()
{freopen("lottery.in","r",stdin);//freopen("lottery.out","w",stdout);scanf("%d%d",&n,&L);for(int i=1;i<=n;i++)scanf("%d",&a[i]);scanf("%d",&q);for(int i=1;i<=q;i++)scanf("%d",&x[i]),v[x[i]+1]=1;num[0]=1;for(int i=1;i<=n;i++)num[i]=num[i-1]+v[i];for(int l=1;l<=n;l++){int dis=0;if(l+L>n) break; for(int i=1;i<=L;i++)if(a[i]!=a[i+l]) dis++;ans[1][num[dis]]++;ans[1+l][num[dis]]++;for(int i=2;i<=n-L+1;i++){int j=i+l;if(j>n-L+1) break;if(a[i-1]!=a[j-1]) dis--;if(a[i+L-1]!=a[j+L-1]) dis++;ans[i][num[dis]]++;ans[j][num[dis]]++;}}for(int i=1;i<=num[n];i++)for(int j=1;j<=n;j++)ans[j][i]+=ans[j][i-1];for(int i=1;i<=q;i++){for(int j=1;j<=n-L+1;j++)printf("%d ",ans[j][num[x[i]]]);putchar('\n');}
}

jzoj6312-Lottery【dp,前缀和】相关推荐

  1. codeforces #274 C. Riding in a Lift dp+前缀和优化

    codeforces #274  C. Riding in a Lift   dp+前缀和优化 Imagine that you are in a building that has exactly  ...

  2. DP + 前缀和 - 牡牛和牝牛 - AcWing 1307

    DP + 前缀和 - 牡牛和牝牛 - AcWing 1307 约翰要带 N 只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛. 牛们要站成一排,但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决 ...

  3. hdu3336 KMP + DP 前缀数组出现的次数

    题意:       给你一个串,问你他的所有前缀子串在本串中的出现次数,注释:abc的前缀子串是 a ab abc; 思路:      还是利用了next数组,先对子串求出next数组,再开一个数组d ...

  4. 2019.03.30【NOIP提高组】模拟 B 组 排序、二分+spfa、树形DP+前缀和

    文章目录 0 SERN的野望 1 与机关的决战 2 蜡笔 立阳二中.清华经管系贺朝 0 SERN的野望 Error! Human is dead. Mismatch. SERN妄图研发出时间机器,然而 ...

  5. [HNOI2004] 敲砖块(dp + 前缀和)

    P1437 [HNOI2004] 敲砖块 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 参考文章 [题解][HNOI2004]敲砖块 - gcd & Blog - 洛谷博客 ...

  6. [dp][前缀和][并查集] 洛谷 P3575 DOO-Around the world

    题目描述 After trying hard for many years, Byteasar has finally received a pilot license. To celebrate t ...

  7. [dp][前缀和] Jzoj P5907 轻功(qinggong)

    Description 题目背景: 尊者神高达进入了基三的世界,作为一个 mmorpg 做任务是必不可少的,然而跑地图却令人十分不爽.好在基三可以使用轻功,但是尊者神高达有些手残,他决定用梅花桩练习轻 ...

  8. [AtCoder Educational DP Contest] V - Subtree(树形dp + 前缀积/后缀积)

    problem luogu 给一棵树,对每一个节点染成黑色或白色. 对于每一个节点,求强制把这个节点染成黑色的情况下,所有的黑色节点组成一个联通块的染色方案数,答案对 MMM 取模. 1≤n≤1e5, ...

  9. P2513-[HAOI2009]逆序对数列【dp,前缀和】

    正题 题目链接:https://www.luogu.org/problemnew/show/P2513 题目大意 求长度为nnn逆序对为kkk个的序列总数. 解题思路 设fi,jf_{i,j}fi,j ...

最新文章

  1. 简单tc流量控制使用
  2. JavaScript修饰器-让代码更干净
  3. A01_[NumPy中文网]数组基础(创建数组,多维数组切片,数组属性)、使用数组(基本操作符,数组特殊运算符)、索引(花式索引,布尔索引,缺省索引)
  4. C语言写文件到txt里有屯字,C语言10 文件.ppt
  5. jpa执行sql脚本_JPA persistence.xml SQL脚本定义
  6. Python(23)-面向对象2-继承,多态
  7. Python 几种可视化方法随笔
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的企业人事管理系统
  9. AJAX(异步的 JavaScript 和 XML)
  10. Java 11 升级:“债务”“危机”
  11. 理解Java的几张图
  12. linux 复 带进度条
  13. MySQL 主从同步
  14. Sybase的安装、配置及使用(五)
  15. OC中浮点数转整数的进一法和去尾法
  16. bmob php支付,Bmob支付
  17. 英特尔i5 1240H
  18. 淘宝购物券,淘宝网的购物券怎么用
  19. java validate 框架_使用validate验证框架
  20. oracle中同个字段匹配多个like(or关系)实例解决方案

热门文章

  1. swoole会合并到php吗,thinkphp整合swoole
  2. linux 查询系统性能,Linux 系统各种性能查询
  3. php中请写出定义变量的两种方法,php定义变量几种
  4. 7-42 整型关键字的散列映射 (25 分)(思路加详解)兄弟们 来呀 写题呀
  5. php防止cc攻击代码,防cc攻击PHP防CC攻击实现代码
  6. [Java基础]Stream流终结操作之forEachcount
  7. [C++11]可调用对象
  8. [Java基础]函数式接口
  9. [蓝桥杯2016初赛]冰雹数-模拟
  10. mysql数据库check命令_利用mysqlcheck命令快速修复mysql数据库