noip2016 蚯蚓 單調佇列

2021-08-09 07:42:37 字數 755 閱讀 9919

去年提高組的day2t2,很容易有種讓人看到就會想到用堆的做法,但是堆的時間複雜度顯然是不夠的(雖然可以拿到85分,暴力打得好的話),所以就像之前做那道合併果子一樣的,想到了單調佇列的做法。

可以把原來的蚯蚓按照從大到小的排序放在第乙個佇列裡面,然後每一次切蚯蚓,把第一部分放在第二個佇列中,第二部分放第三個佇列中,佇列便會滿足單調性,可以簡單的證明一下:現在先假設三個佇列都是滿足單調遞減的性質,設上一秒取出的最大的元素為a,現在取出的最大的元素為b,必滿足b-q現在加到後面的元素為b*p和b-b*p,而此時其餘的長度又增加了q,所以因為b-qb*q,a-a*p+q>b-b*q,所以總是滿足單調性的。

#include#include#include#include#include#include#define ll long long

using namespace std;

const int maxn=1e7+10;

const ll inf=0x7fffffffffffffff;

int n,u,v,t;

ll m,q;

ll a[maxn];

long double p;

queues[3];

bool cmp(ll a,ll b)

void read(ll &x)

x=num;

}ll find()

else if(len1>=len2 && len1>=len0)

else

} int main()

cout<

NOIP2016 蚯蚓 佇列 單調性優化

傳送門 努力刷完noip提高組題目ing 50 60分演算法 直接用堆 優先佇列模擬 100分演算法 觀察題目,發現其中隱含的單調性。設兩條蚯蚓長度為a,b a,ba,b,其中a ba b a b。則a aa被切掉時長度分別為pa,1 p a pa,1 p a pa,1 p a,過t秒之後長度為pa...

noip2016 蚯蚓 佇列

傳送門 樣例1 3 7 1 1 3 1 3 3 2 樣例2 3 7 1 1 3 2 3 3 2 樣例3 3 7 1 1 3 9 3 3 2 樣例1 3 4 4 4 5 5 6 6 6 6 5 5 4 4 3 2 2 樣例2 4 4 5 6 5 4 3 2 樣例3 空行 很顯然是一道優先佇列的題0 0...

noip2016 蚯蚓 佇列

傳送門 樣例1 3 7 1 1 3 1 3 3 2 樣例2 3 7 1 1 3 2 3 3 2 樣例3 3 7 1 1 3 9 3 3 2 樣例1 3 4 4 4 5 5 6 6 6 6 5 5 4 4 3 2 2 樣例2 4 4 5 6 5 4 3 2 樣例3 空行 很顯然是一道優先佇列的題0 0...