Blah數集(雙指標單調佇列)

2022-03-14 10:08:03 字數 940 閱讀 2182

描述:

大數學家高斯小時候偶然間發現一種有趣的自然數集合blah,對於以a為基的集合ba定義如下:

(1) a是集合ba的基,且a是ba的第乙個元素;

(2)如果x在集合ba中,則2x+1和3x+1也都在集合ba中;

(3)沒有其他元素在集合ba中了。

現在小高斯想知道如果將集合ba中元素按照公升序排列,第n個元素會是多少?

輸入

輸入包括很多行,每行輸入包括兩個數字,集合的基a(1<=a<=50))以及所求元素序號n(1<=n<=1000000)

輸出:

對於每個輸入,輸出集合ba的第n個元素值

樣例輸入:

1 100

28 5437

樣例輸出:

418

900585

思路:

開兩個指標,head1和head2。

只比較第乙個元素*3+1和第二個元素*2+1哪個小即可,把小的入隊,並且隊首指標+1,當兩個數相同時,只入隊其中乙個,head1和head2同時+1,以此類推,維護單調遞增序列,當tail==n時,輸出隊尾元素即可。

具體看**。

#include

#include

using namespace std;

const int maxn=1000010;

int a,n,head1,head2,tail,q[maxn];

int main()

else

else}}

printf("%d\n",q[tail]);

}return

0;}

Blah數集 題解

題目 blah數集 就一開始來說,我們有乙個元素a,我們要把2 a 1和3 a 1加入數集裡 注意 這裡說的是集合,也就是說裡面沒有重複的元素,因此我們需要去重 這裡用了雙指標的思想 建立兩個佇列q1,q2來分別儲存兩種方式生成的元素 建立兩個指標i,j分別指向兩個隊的隊頭 比較指標指著的兩個數,a...

複習題之Blah數集

題目描述 大數學家高斯小時候偶然間發現一種有趣的自然數集合blah,對於已a為基的集合ba定義如下 1 a是集合ba的基,且a是ba的第乙個元素 2 如果x在集合ba中,則2x 1,3x 1也都在集合ba中 3 沒有其他元素在集合ba中了。現在小高斯想知道如果將集合ba中的元素按照公升序排列,第n個...

手動實現雙指標式的單調佇列

有時候我們有這樣的需求 得到乙個 l,r 區間的最值,並且這個區間的兩個邊界指標是不斷朝乙個單方向移動的,這時手動的o n 優先佇列 就是單調佇列 就能滿足需求了 自己寫在這裡給自己參考,其實這東西已經爛大街了吧qaq include using namespace std define mp ma...