等差子數列 rmq 分塊思想

2021-10-01 21:05:55 字數 728 閱讀 9525

等差子數列

題解:

看到這一題,我的想法是利用分塊去寫,將等差數列分為一塊,但是由於等差數列有連續性,故利用分塊思想,將解答案分為三步,兩邊角的,最大等差數列長度,再求中間部分的最大序列長度,中間部分可以利用rmq去求,因為是數列,所以求區間最值用rmq就很方便了

ac**:

#include

#include

#include

#include

using namespace std;

const

int maxn=

1e5+5;

int dp[maxn][32

],sum[maxn]

,l[maxn]

,r[maxn]

;int a[maxn]

,n;//利用分塊的思想求解

void

init_rmq()

for(

int j=1;

(1<<=n; j++)}

}int

rmq(

int l,

int r)

intmain()

for(

; kinit_rmq()

;while

(m--)}

}

最長連續等差子數列

描述 給定乙個長度為n的整數數列,你需要在其中找到最長連續子數列的長度,並滿足這個子數列是等差的。注意公差小於或等於0的情況也是允許的。輸入 第一行為測試資料的組數t 1 t 100 請注意,任意兩組測試資料之間是相互獨立的。每組資料報含兩行 第一行為乙個整數n 1 n 100 表示給定數列長度。第...

等差子數列 HihoCoder 1710

給定n個整數a1,a2,an,小hi會詢問你m個問題。對於每個問題小hi給出兩個整數l和r l r 請你找出 al,al 1,al 2,ar 中最長的等差連續子數列,並輸出其長度。例如 2,3,5,7,9 中最長的等差連續子數列是 3,5,7,9 長度為4。input 第一行包含兩個整數n和m。第二...

最長等差數列 最長等差數列 及子串行分析

今日面試題 最長等差數列 給定未排序的陣列,請給出方法找到最長的等差數列。子串行分析 原題給定長度為n的整數數列 a0,a1,an 1,以及整數s。這個數列會有連續的子串行的整數總和大於s的,求這些數列中,最小的長度。分析如果只是像題目這樣的描述,沒有強調正數,可以採用o n 2 的方法。但是,很多...