wfirstzhang @ 2024-05-12 15:14:33
#include <cstdio>
using namespace std;
struct que_ele { int pos, value; que_ele():pos(0),value(0){} };
que_ele min_que[16266035];
int front = 0, tail = 0;
int insert(const int num, const int period, const int pos) {
while (tail >= front && min_que[front].pos <= pos - period)
front++;
const int res = min_que[front].value; //前period项的队列头
while (tail >= front && min_que[tail - 1].value >= num)
tail--; //比num大的踢出队列
min_que[tail].value = num;
min_que[tail++].pos = pos;
return res;
}
inline int& query_min(void) {
return min_que[front].value;
}
int main() {
int n, m, temp = 0;
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i++)
{
scanf("%d", &temp);
printf("%d\n", insert(temp, m, i));
}
return 0;
}
0 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 12 12 12 12
12 12 22 22 22 22 22 22 17 17
17 17 17 17 17 17 17 17 17 17
17 17 17 33 33 33 33 33 33 33
37 37 19 19 19 19 19 19 19 19
19 19 19 19 19 19 19 28 28 19
19 19 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 1 1 1
1 1 1 1 1 1 1 1 1 1
0 5 5 5 5 5 5 5 5 5
5 5 5 5 5 12 12 12 12 12
12 22 22 22 22 22 22 22 17 17
17 17 17 17 17 17 17 17 17 17
17 17 33 33 33 33 33 33 33 37
37 37 37 44 44 44 44 44 28 28
28 28 28 28 28 28 28 28 28 28
188 56 56 65 65 29 29 29 29 29
29 29 29 27 27 27 27 27 186 19
19 19 19 19 19 19 18 2 2 2
代码
by Xrange @ 2024-05-12 15:52:21
你可以用priority_queue逝一下
by masonxiong @ 2024-05-12 15:53:57
@Xrange 这题考的单调队列,不是优先队列吧
by Xrange @ 2024-05-12 16:10:58
@masonxiong 那deque???
by Xrange @ 2024-05-12 16:46:52
deque的定义:
struct ty { int id,val; }a[2000100];
long long n,m,sq[2000100];
deque的主要部分:
for(int i=1;i<=n;i++) {
while(!q.empty()&&q.back().val>=a[i].val)
q.pop_back();
q.push_back(a[i]);
while(!q.empty()&&q.front().id<i-m)
q.pop_front();
sq[i]=q.front().val;
}
@wfirstzhang @masionxiong
by masonxiong @ 2024-05-12 17:47:07
@Xrange
同志,你似乎对双端队列,优先队列和单调队列有一些误解
所谓“优先队列”,即 std::priority_queue
,可以
所谓“双端队列”,即 std::deque
,维护一个序列,支持随机访问和
所谓“单调队列”,即 monotonous_queue
,这个并没有在 STL 中,它是一种 OI 中常用(?)的数据结构,也是本题考查的部分,就是你写的那些
by Xrange @ 2024-05-12 17:53:25
@masonxiong 抱歉我是xxs
by Xrange @ 2024-05-12 20:17:06
我说用 deque
实现没说思想是 deque
!!!
by wfirstzhang @ 2024-05-12 21:44:11
@Xrange @masonxiong 找到问题了,原来写成
by Xrange @ 2024-05-13 16:48:29
@wfirstzhang 这和 !q.empty()
等价