hdu5489 樹狀陣列 dp

2022-05-15 04:16:07 字數 1007 閱讀 2898

2015-10-06 21:49:54

這題說的是個給了乙個陣列,然後刪除任意起點的乙個連續的l個數,然後求最長遞增子串行《是遞增,不是非遞減》,用乙個樹狀陣列維護一下就ok了

#include #include 

#include

#include

#include

using

namespace

std;

const

int maxn=100005

;int

a[maxn],b[maxn];

int dp[maxn][2

];int num[maxn][3

],n;

int lowbit(int

x)void add(int loc, int v,int

op)}

int sum(int loc, int

op)

return

ans;

}int

main()

if(l==n)

b[n]=a[id]-1

; sort(b,b+(n+1

)); n=unique(b,b+(n+1))-b;

memset(num,

0,sizeof

(num));

for(int i=0; i)

int ans=0

;

for(int i=0; i)

if(i-l>=0

)

if(i>=l)

if(n-l>i)

ans=max(max(dp[i][0],dp[i][1

]),ans);

}printf(

"case #%d: %d\n

",cc,ans);

}return0;

}

view code

hdu 2227 樹狀陣列 dp

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

hdu5125 樹狀陣列 dp

hdu5125 他說的是n個人每個人都有兩個氣球a,b,氣球各自都有相應的體積,現在讓他們按照序號排列好來,對他們的a氣球體積值計算最長上公升子串行,對於這整個排列來說有m次機會讓你將a氣球替換成b氣球 允許不使用完 問最後的最長上公升子串行 的長度是多少,哈哈,當然用dp的思想我們很容易就能知道狀...

hdu 5542(樹狀陣列優化dp)

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