HDU4991 Ordered Subsequence (dp+樹狀陣列+離散化)
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=4991
題目的意思是求長度為 m 的上升序列有多少個;
設DP[I][J]表示 以第i個元素結尾的 長度為j的序列的個數
dp[i][j]=sum(dp[k][j-1]) (i>k &&a[i]>a[k])
數字有1萬個,先離散化一下,把所有數字對應到1到n之間,然後用陣列陣列進行求和就好
程式碼如下:
#include <iostream>
#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 10010;
const int mod = 123456789;
typedef long long LL;
LL c[N],a[N],b[N];
int n,m;
LL dp[N][104];
int lowbit(int x)
{
return x & (-x);
}
void update(int pos,LL val)
{
while(pos <= n)
{
c[pos] += val;
pos += lowbit(pos);
}
}
LL query(int pos)
{
LL res = 0;
while(pos > 0)
{
res = (res+c[pos])%mod;
pos -= lowbit(pos);
}
return res;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=1;i<=n;i++)
{
scanf("%I64d",&a[i]);
b[i] = a[i];
}
sort(b+1,b+n+1);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
dp[i][1] = 1;
for(int j=2;j<=m;j++)
{
memset(c,0,sizeof(c));
for(int i=1;i<=n;i++)
{
int ind = lower_bound(b+1,b+n+1,a[i])-b;
dp[i][j] = query(ind-1);
update(ind,dp[i][j-1]);
}
}
LL ans = 0;
for(int i=1;i<=n;i++)
ans = (ans + dp[i][m])%mod;
printf("%I64d\n",ans);
}
return 0;
}
相關文章
- HDU 5862 Counting Intersections(樹狀陣列+掃描線+離散化)陣列
- LeetCode 493. 翻轉對(歸併排序 || 離散化+樹狀陣列)LeetCode排序陣列
- Leetcode 327. 區間和的個數 (字首和 + 離散化 + 樹狀陣列)LeetCode陣列
- 樹狀陣列陣列
- 解析樹狀陣列陣列
- 二維樹狀陣列陣列
- 樹狀陣列詳解陣列
- 樹狀陣列基礎陣列
- 樹狀陣列模板題 & (樹狀陣列 1:單點修改,區間查詢)陣列
- 樹狀陣列快速入門陣列
- 樹狀陣列和逆序對陣列
- 【筆記/模板】樹狀陣列筆記陣列
- POJ-2352 Stars(樹狀陣列)陣列
- 樹狀陣列模板+習題集陣列
- 樹狀陣列(我是真小白)陣列
- 資料結構——樹狀陣列資料結構陣列
- 樹狀陣列3種基本操作陣列
- HDU 1556 Color the ball(線段樹|樹狀陣列)陣列
- 離散化
- HDU 1541 & POJ 2352 Stars (樹狀陣列)陣列
- bzoj3155: Preprefix sum(樹狀陣列)陣列
- 【luogu3368】模板 樹狀陣列 2陣列
- 洛谷題單指南-二叉堆與樹狀陣列-P3368 【模板】樹狀陣列 2陣列
- ECNU OJ 3353 塗黑板(線段樹離散化)
- HDU 2689 Sort it【樹狀陣列求逆序對】陣列
- CHOJ 4201 樓蘭圖騰【樹狀陣列】陣列
- AC自動機+字典序+樹狀陣列陣列
- HDU 1542 Atlantis (線段樹+離散化+掃描線)
- 分組(狀壓dp+技巧:快速列舉子集)
- 樹狀陣列(BIT)—— 一篇就夠了陣列
- 樹狀陣列(待補)(生硬 公式 用法 證明)陣列公式
- 資料結構之真別多想—樹狀陣列資料結構陣列
- bzoj2743: [HEOI2012]採花(樹狀陣列)陣列
- 樹狀陣列入門陣列
- POJ 2528 Mayor's posters (線段樹 區間更新+離散化)
- LeetCode C++ 劍指 Offer 51. 陣列中的逆序對【歸併排序/樹狀陣列/線段樹】LeetCodeC++陣列排序
- PHP 陣列轉樹結構/樹結構轉陣列PHP陣列
- HDU 6274 Master of Sequence(思維+樹狀陣列+二分)AST陣列
- HDU 1556【區間更新+單點查詢 樹狀陣列】陣列