題意: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 ...