HDU 4521 小明序列 線段樹 DP

2021-06-21 07:11:01 字數 1266 閱讀 4084

題目鏈結

#include#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 100005;

const int inf = 1<<30;//0x7f;

int n,d;

int a[maxn],dp[maxn];//dp[i]為以ai結尾滿足小明序列要求的最長子序列的長度

struct node

tree[maxn<<2];

void buildtree( int rt,int ld,int rd )

}void updata( int rt,int ld,int rd,int pos,int val )

int mid = (ld+rd)>>1;

if( pos <= mid ) updata( rt<<1,ld,mid,pos,val );

else updata( rt<<1|1,mid+1,rd,pos,val );

tree[rt].maxs = max( tree[rt<<1].maxs , tree[rt<<1|1].maxs );

}int query( int rt,int ld,int rd,int x,int y )

int main()

buildtree( 1,0,max );

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

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

} return 0;

}

lis解法

#include #include #include using namespace std;

const int maxn = 100005;

const int inf = 1<<30;

int n,k;

int a[maxn],dp[maxn],c[maxn];

//a陣列存放序列

//dp記錄在i點時最長的遞增子串行長度

//c陣列為每次查詢時候的標記,記錄路徑

int bin( int t,int top )

return ld;

}int lis()

return top;

}int main()

printf("%d\n",lis());

}return 0;

}

hdu4521 小明系列問題 小明序列 線段樹

題意 有多組測試資料,每組資料的n和d表示,有n個數,求間距大於d的最長上公升序列。題解 1 按權值從小到大排序,權值相同的時候按下標從大到小排序。2 線段樹維護符合條件的上公升子串行,然後去找當前情況在其前面符合間距的範圍裡找當前最長的上公升子串行,再更新進去就可。include include ...

HDU4521 小明系列問題 小明序列

description 大家都知道小明最喜歡研究跟序列有關的問題了,可是也就因為這樣,小明幾乎已經玩遍各種序列問題了。可憐的小明苦苦地在各大 上尋找著新的序列問題,可是找來找去都是自己早已研究過的序列。小明想既然找不到,那就自己來發明乙個新的序列問題吧!小明想啊想,終於想出了乙個新的序列問題,他欣喜...

hdu5217 括號序列 線段樹

題意 給一串括號,有2個操作,1。翻轉某個括號。2。查詢某段區間內化簡後第k個括號是在原序列中的位置。1 n,q 200000.題解 可以知道,化簡後的序列一定是 這種形式的。線段樹每個節點就存對應區間內化簡後的ls也就是 的數量,rs也就是 的數量。然後我先把區間 l,r 找出來合併一遍,找出第k...