hdu2227 樹狀陣列優化dp

2022-06-08 16:12:07 字數 1004 閱讀 6823

hdu2227 find the nondecreasing subsequences

傳送門題意

有乙個長度為\(n(1\leq n\leq 100000)\)的數列,計算所有不下降子串行的個數,答案對\(1e9+7\)取模

題解

遞推式:\(dp[i]=(\sum dp[j])+1,(j

離散化之後遍歷序列,樹狀陣列維護\(dp[i]\)的值,所有滿足條件的\(dp[j]\)的和就是樹狀陣列中元素\(a[i]\)的字首和

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long

#define pii pair#define pll pair#define pi acos(-1.0)

#define eps 1e-6

#define lowbit(x) x&(-x)

using namespace std;

const int maxn=100010,mod=1000000007;

int n,a[maxn],b[maxn];

ll bit[maxn];

void add(int x,int v)

}int query(int x)

return sum;

}int main()

sort(b,b+n);

int len=unique(b,b+n)-b;

for(int i=1;i<=n;i++)

memset(bit,0,sizeof(bit));

ll ans=0;

for(int i=1;i<=n;i++)

printf("%lld\n",ans);

}return 0;

}

hdu 2227 樹狀陣列 dp

題意是求乙個數列的不遞減的子串行的個數 很顯然,如果只用dp來做的話時間是o n n 因為dp i 為前i個數可能的方案,則狀態轉移方程為dp i sum dp j j 先對num按數來進行排序,這道題因為資料較大 用到了離散化 因為更新是是按原序更新的,及i之前的num j 一定比num i 小,...

hdu 5542(樹狀陣列優化dp)

題意 求n個數中長度為m的上公升子串行的個數 解題思路 dp i j 表示第i個數長度為j的上公升序列的個數。dp i j sum,這裡的時間複雜度有o n 會超時,所以這裡要有優化。其實可以將a i 離散化,對於每乙個j,構造乙個樹狀陣列,這樣求sum就可以用樹狀陣列的求和了,時間複雜度可以降為o...

hdu5489 樹狀陣列 dp

2015 10 06 21 49 54 這題說的是個給了乙個陣列,然後刪除任意起點的乙個連續的l個數,然後求最長遞增子串行 是遞增,不是非遞減 用乙個樹狀陣列維護一下就ok了 include include include include include using namespace std co...