单调队列优化dp,WA,求调
  • 板块学术版
  • 楼主LolaPeppa
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/27 15:43
  • 上次更新2024/7/27 15:53:33
查看原帖
单调队列优化dp,WA,求调
1314900
LolaPeppa楼主2024/7/27 15:43

P3572 [POI2014] PTA-Little Bird

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n, m, h[1000010], k[30], f[1000010], q[1000010], hh, tt;
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i ++ ) scanf("%d", &h[i]);
	scanf("%d", &m);
	for (int i = 1; i <= m; i ++ ) scanf("%d", &k[i]);
	for (int t = 1; t <= m; t ++ ) {
		memset(f, 0x3f, sizeof f);
		f[1] = 0;
		memset(q, 0, sizeof q);
		hh = 1, tt = 0;
		q[ ++ tt] = 1;
		for (int i = 2; i <= n; i ++ ) {
			if (hh < i - k[t]) hh ++ ;
			f[i] = f[q[hh]] + (h[q[hh]] <= h[i]);
			while (hh <= tt && (f[q[tt]] > f[i] || (f[q[tt]] == f[i] && h[q[tt]] <= h[i]))) tt -- ;
			q[ ++ tt] = i;
		}
		printf("%d\n", f[n]);
	}
	return 0;
}
2024/7/27 15:43
加载中...