递增子序列

金牌导航 数据结构优化DP-1

题目大意

给出一个序列,让你求长度为m的单调递增子序列的个数

输入样例

3 2
1 1 2
7 3
1 7 3 5 9 4 8

输出样例

2
12

数据范围

1⩽n⩽104,1⩽m⩽100,0⩽ai⩽9876543211\leqslant n \leqslant 10^4,1\leqslant m \leqslant 100,0\leqslant a_i \leqslant 9876543211⩽n⩽104,1⩽m⩽100,0⩽ai​⩽987654321

解题思路

对于第i个数,如果要使以它结尾的单调递增子序列长度为j,那么就要在前面找到比aia_iai​小的数,累加以它们为结尾长度为j-1的单调递增序列(就是把i接到后面)
如果直接DP枚举,会TLE
这时可以用树状数组在O(logn)O(logn)O(logn)的时间内求出累加的值,没计算出一个数,就加进树状数组中

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 100010
#define wyc 123456789//orz
using namespace std;
int n, m, l, x, a[N], b[N], c[101][N];
void add(int g, int x, int y)
{for (; x <= l; x += x&-x)c[g][x] = (c[g][x] + y) % wyc;
}
int ask(int g, int x)
{int y = 0;for (; x; x -= x&-x)y = (y + c[g][x]) % wyc;return y;
}
int main()
{while(~scanf("%d%d", &n, &m)){memset(c, 0, sizeof(c));for (int i = 1; i <= n; ++i){scanf("%d", &a[i]);b[i] = a[i];}sort(a + 1, a + 1 + n);l = unique(a + 1, a + 1 + n) - a - 1;//离散化for (int i = 1; i <= n; ++i){x = lower_bound(a + 1, a + 1 + l, b[i]) - a;for (int j = m; j > 1; --j)add(j, x, ask(j - 1, x - 1));//求累加值,再加到树状数组中add(1, x, 1);}printf("%d\n", ask(m, l));}return 0;
}

【树状数组】递增子序列(金牌导航 数据结构优化DP-1)相关推荐

  1. 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)

    正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...

  2. 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)

    正题 luogu 7302 金牌导航 数据结构优化DP-4 题目大意 在坐标轴上会出现n个金币,第i个金币tit_iti​时在wiw_iwi​出现(只出现一个单位时间),价值为sis_isi​,当你t ...

  3. 【DP】【树状数组】折线统计(金牌导航 数据结构优化DP-1)

    正题 金牌导航 数据结构优化DP-1 题目大意 平面上有n个点,让你选择若干点,连接x坐标相邻的点,其中连续上升或下降的为一段,问你有多少中选择方案,使得段数为k 解题思路 设fi,j,0/1f_{i ...

  4. 【DP】【线段树】基站选址(luogu 2605/金牌导航 数据结构优化DP-2)

    正题 luogu 2605 金牌导航 数据结构优化DP-2 题目大意 有若干个村庄在一条直线上,距离第一个村庄did_idi​,在该村庄建立基站要花费cic_ici​,如果在离该村不大于sis_isi ...

  5. Vijos P1448 校门外的树【多解,线段树,树状数组,括号序列法+暴力优化】

    校门外的树 描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的-- 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K= ...

  6. 高级数据结构1—初识树状数组—快速求得前缀和和修改某一元素值

    - 本人的LeetCode账号:魔术师的徒弟,欢迎关注获取每日一题题解,快来一起刷题呀~ 本人Gitee账号:路由器,欢迎关注获取博客内容源码.   树状数组和其他的高级数据结构不同,它非常的好写,同 ...

  7. 树状数组 数据结构详解与模板(可能是最详细的了)

    目录 转载请注明出处:bestsort.cn 树状数组基础 单点更新: 区间查询: 高级操作 求逆序对 操作 原理 求区间最大值 区间修改+单点查询 查询 修改 区间修改+区间查询 查询 修改 二维树 ...

  8. dp 树状数组 逆序元组

    wmq的队伍 发布时间: 2017年4月9日 17:06   最后更新: 2017年4月9日 17:07   时间限制: 2000ms   内存限制: 512M 描述 交大上课需要打卡,于是在上课前的 ...

  9. C - The Battle of Chibi (dp加树状数组前缀和优化)

    曹操组成大军,要攻打整个华南.于舟很担心.他认为击败曹操的唯一方法是在曹操的军队中配备一个间谍.但曹操的将领和士兵都是忠诚的,不可能说服他们中的任何一个人背叛曹操. 所以余州只剩下一条路,派人假投降曹 ...

最新文章

  1. SpringMVC+SwfUpload进行多文件同时上传
  2. 做一个可以和时空分类的神经网络
  3. 【后缀数组】【poj2774】【 Long Long Message】
  4. 飞桨模型保存_飞桨实战笔记:自编写模型如何在服务器和移动端部署
  5. 内存管理单元MMU简介
  6. unity Conditional特性 总结
  7. 什么是数据、元数据、主数据?这可能是大多数人没看过的解释
  8. Mybatis教程-实战
  9. Python快速转换numpy数组中Nan和Inf的方法
  10. Java基础 | 专业排行榜前7的Java代码审计工具
  11. Canvas彩色樱花图案背景js特效
  12. ★「C++游戏」BattleOfPhantom:大乱斗游戏升级版
  13. 编译原理 —— 什么是语法分析
  14. 文字直接转语音,一直都这么简单!
  15. 计算机网考里操作题发邮件,电大_全国计算机应用基础考试_网考内容_全部操作题(小条版)...
  16. 变态级JAVA程序员面试32问(转)
  17. 3.uedit富文本编辑器的使用_note
  18. Android 手机采集摄像头视频 socket 视频传输实时传播
  19. php视频点播系统,PHPvod 视频点播系统 v3.1 for php5.4.x
  20. Vue省市区三级联选择器V-Distpicker的使用

热门文章

  1. python实用脚本 知乎_停课不停学|38 个免费 Python 项目合集,从小白到老司机!...
  2. python连接mysql_Python爬虫进阶教程(八):MySQL 数据库连接
  3. 乐视android版本点四下,EUI5.9+Android7.0刷机包
  4. JVM笔记(JVM内存+垃圾回收器)详解
  5. [设计模式]观察者模式
  6. Linux和unix发行版本,UNIX发展历史和发行版本
  7. 计算机系统占有率,微软继续领跑PC操作系统市场 Win10占有率突破25%
  8. mysql 整数_MySQL 整数(int)数据类型
  9. C - Insertion Sort Gym - 101955C(2018icpc沈阳/打表找规律)
  10. NEERC 17 Problem I. Interactive Sort