hdu3706基礎的單調佇列

2021-06-27 05:08:26 字數 1292 閱讀 1373

題意:

解釋題意不如直接把這個題貼上過來,因為題目很短題意很容易懂。

give you three integers n, a and b. 

then we define si = ai mod b and ti = min

your task is to calculate the product of ti (1 <= i <= n) mod b.

input

each line will contain three integers n(1 <= n <= 107),a and b(1 <= a, b <= 231-1). 

process to end of file.

output

for each case, output the answer in a single line.

sample input

1 2 3

2 3 4

3 4 5

4 5 6

5 6 7

sample output23

456思路:

比較簡單的乙個單調佇列題目,我們可以建立乙個單調遞增的單調佇列,開乙個1000w的陣列,不用怕報記憶體,記憶體夠,然後我們每次都把乙個新值進佇列,然後把隊尾比這個值大於等於的出隊,對頭把下標之差大於a的出隊就行了,每次都是把乙個新的值放進佇列,然後在對頭拿乙個最小的來作為當前的t,然後一邊更新,一邊拿,一邊記錄答案就行了,o(n)的時間複雜度,1000w的,可以過(不過感覺還是有點險,但這個題目都o(n)了在過不了,那估計就設計到轉換什麼的了,那我就做不了了,嘿嘿)。

#include

#include

#define n 10000005

typedef struct

node;

node q[n];

int tou ,wei;

__int64 a ,b ,n;

void insert(int id ,__int64 num)

q[++wei].num = num;

q[wei].id = id;

for(int i = tou + 1 ;i <= wei ;i ++)

if(id - q[i].id > a) tou ++;

else break;

}int main ()

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

}return 0;

}

hdu3706單調佇列

很基礎的單調佇列 include include include include include include include include include include include include include define pi acos 1 define ll long long ...

HDU3415單調佇列

這題是單調佇列的典型運用。至於單調佇列,就是乙個雙端佇列,在隊首 f 出隊,在隊尾 b 出隊入隊,我們要維護整個佇列的元素是單調的,比如,我們要動態查詢從左向右的區間的最小值,那麼我們就要在佇列中維護乙個單調遞增的序列,從左向右列舉,佇列的元素還有乙個id值,代表這個元素在原序列中的位置,然後左邊的...

HDU 3415單調佇列

這個題目屬於常見題型,給定一組環狀數列,求出其中長度不超過k的數字之和的最大值。用到了字首和的技巧,比如要求i,j間所有數字之和,可以提前在輸入的時候計算出從0 i的數字之和及從0 j的數字之和,那麼sum i j sum j sum i 現在的問題是求出最大的sum i j 那麼我們可以固定sum...