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...