CodeForce 91B 單調佇列 二分

2021-09-25 08:10:41 字數 1158 閱讀 7914

題意:n

nn個數,求出a[i

]a[i]

a[i]

後面最後乙個小於a[i

]a[i]

a[i]

的數與a[i

]a[i]

a[i]

間的距離,如果沒有小於a[i

]a[i]

a[i]

的數則輸出-1-1

-1題解:從後往前遍歷陣列,單調佇列維護乙個遞減的序列,每次判斷將要插入的數與隊尾的數的大小關係。

如果當前插入的數不能保持佇列的單調性則二分求答案,如果能保持,就說明這個數小於佇列裡的最小值,直接輸出-1

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

#define lson l,mid,rt<<1

#define rson mid+1,r,rt<<1|1

#define mem(a,b) memset(a,b,sizeof(a))

#define lowbit(x) x&-x

const int maxn = 1e5 + 5;

const int mod = 1e9 + 7;

const double eps = 1e-6;

const double pi = acos(-1.0);

#define lowbit(x) x&-x

const int maxn = 1e5 + 5;

const int mod = 1e9 + 7;

const double eps = 1e-6;

const double pi = acos(-1.0);

int n,a[maxn],qmin[maxn],ans[maxn];

int main()else

}ans[i] = qmin[res]-1-i;

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

printf("%d ",ans[i]);

printf("\n");

} return 0;

}

CF91B Queue(單調佇列 二分)

這題比較經典,我們想要求比他小的最遠的點 因此我們發現,如果乙個點比他前面的點大還比他近,說明這個點永遠不會作為答案 因此我們就可以維護乙個單調佇列,之後二分找到第乙個大於等於他的位置在哪,之後這個位置的前乙個就是答案 includeusing namespace std typedef long ...

二維單調佇列

發個昨天考試的題 二維單調佇列 單調佇列之前也學了但沒做過題,沒寫過。但我感覺也不難,今天直接搞了個二維的 然後發個單調佇列最初的講解以便看懂下面的話。點這 t1 為了和諧 square.pas c cpp 問題背景 在機房裡,有兩隻小可愛,乙隻大可愛,乙隻小可愛。其中大可 愛對大的東西感興趣,小可...

Codeforce962B 二進位制列舉暴力

傳送門 題意 給你乙個數字 沒有前導零 要求你刪除一些數字,使得這個數字 不能有前導零 的平方根為整數。沒有則輸出 1.思路 數字不大,二進位制列舉每一種組合情況。二進位制列舉實現傳送門 include include include include include include include ...