【树状数组】递增子序列(金牌导航 数据结构优化DP-1)
递增子序列
金牌导航 数据结构优化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)相关推荐
- 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)
正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...
- 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)
正题 luogu 7302 金牌导航 数据结构优化DP-4 题目大意 在坐标轴上会出现n个金币,第i个金币tit_iti时在wiw_iwi出现(只出现一个单位时间),价值为sis_isi,当你t ...
- 【DP】【树状数组】折线统计(金牌导航 数据结构优化DP-1)
正题 金牌导航 数据结构优化DP-1 题目大意 平面上有n个点,让你选择若干点,连接x坐标相邻的点,其中连续上升或下降的为一段,问你有多少中选择方案,使得段数为k 解题思路 设fi,j,0/1f_{i ...
- 【DP】【线段树】基站选址(luogu 2605/金牌导航 数据结构优化DP-2)
正题 luogu 2605 金牌导航 数据结构优化DP-2 题目大意 有若干个村庄在一条直线上,距离第一个村庄did_idi,在该村庄建立基站要花费cic_ici,如果在离该村不大于sis_isi ...
- Vijos P1448 校门外的树【多解,线段树,树状数组,括号序列法+暴力优化】
校门外的树 描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的-- 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K= ...
- 高级数据结构1—初识树状数组—快速求得前缀和和修改某一元素值
- 本人的LeetCode账号:魔术师的徒弟,欢迎关注获取每日一题题解,快来一起刷题呀~ 本人Gitee账号:路由器,欢迎关注获取博客内容源码. 树状数组和其他的高级数据结构不同,它非常的好写,同 ...
- 树状数组 数据结构详解与模板(可能是最详细的了)
目录 转载请注明出处:bestsort.cn 树状数组基础 单点更新: 区间查询: 高级操作 求逆序对 操作 原理 求区间最大值 区间修改+单点查询 查询 修改 区间修改+区间查询 查询 修改 二维树 ...
- dp 树状数组 逆序元组
wmq的队伍 发布时间: 2017年4月9日 17:06 最后更新: 2017年4月9日 17:07 时间限制: 2000ms 内存限制: 512M 描述 交大上课需要打卡,于是在上课前的 ...
- C - The Battle of Chibi (dp加树状数组前缀和优化)
曹操组成大军,要攻打整个华南.于舟很担心.他认为击败曹操的唯一方法是在曹操的军队中配备一个间谍.但曹操的将领和士兵都是忠诚的,不可能说服他们中的任何一个人背叛曹操. 所以余州只剩下一条路,派人假投降曹 ...
最新文章
- SpringMVC+SwfUpload进行多文件同时上传
- 做一个可以和时空分类的神经网络
- 【后缀数组】【poj2774】【 Long Long Message】
- 飞桨模型保存_飞桨实战笔记:自编写模型如何在服务器和移动端部署
- 内存管理单元MMU简介
- unity Conditional特性 总结
- 什么是数据、元数据、主数据?这可能是大多数人没看过的解释
- Mybatis教程-实战
- Python快速转换numpy数组中Nan和Inf的方法
- Java基础 | 专业排行榜前7的Java代码审计工具
- Canvas彩色樱花图案背景js特效
- ★「C++游戏」BattleOfPhantom:大乱斗游戏升级版
- 编译原理 —— 什么是语法分析
- 文字直接转语音,一直都这么简单!
- 计算机网考里操作题发邮件,电大_全国计算机应用基础考试_网考内容_全部操作题(小条版)...
- 变态级JAVA程序员面试32问(转)
- 3.uedit富文本编辑器的使用_note
- Android 手机采集摄像头视频 socket 视频传输实时传播
- php视频点播系统,PHPvod 视频点播系统 v3.1 for php5.4.x
- Vue省市区三级联选择器V-Distpicker的使用
热门文章
- python实用脚本 知乎_停课不停学|38 个免费 Python 项目合集,从小白到老司机!...
- python连接mysql_Python爬虫进阶教程(八):MySQL 数据库连接
- 乐视android版本点四下,EUI5.9+Android7.0刷机包
- JVM笔记(JVM内存+垃圾回收器)详解
- [设计模式]观察者模式
- Linux和unix发行版本,UNIX发展历史和发行版本
- 计算机系统占有率,微软继续领跑PC操作系统市场 Win10占有率突破25%
- mysql 整数_MySQL 整数(int)数据类型
- C - Insertion Sort Gym - 101955C(2018icpc沈阳/打表找规律)
- NEERC 17 Problem I. Interactive Sort