题意:比当前的数更小的数之间的数最多有几个
很简单的一道单调队列题,求出一个单增队列,那么比当前数小的数一定在单增队列里面,不过这题需要二分查找队列里的元素,不然会T
AC代码
#include<cstdio>
using namespace std;
const int N = 1e5 + 50;
int ans[N];
struct node {
int val;
int id;
}date[N],que[N];
int main() {
int n;
int head = 1, toil = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &date[i].val);
date[i].id = i;
}
for (int i = n; i >= 1; i--) {
if (head <= toil && date[i].val > que[toil].val) {
int l = 1, r = toil;
while (l <= r) {
int mid = (l + r) / 2;
if (que[mid].val < date[i].val) {
r = mid - 1;
}
else {
l = mid + 1;
}
}
ans[i] = que[l].id - i - 1;
continue;
}
ans[i] = -1;
que[++toil] = date[i];
}
for (int i = 1; i <= n; i++) {
printf("%d ", ans[i]);
}
}