穷酸博主没有bz权限号, 也不会去$poi$官网, 在某咕刷的$poi$,按照某咕的难度排序刷, poi~

 


 

$Luogu3572 PTA-Little Bird$

单调队列, 队列内按照 步数为第一关键字递增, 高度为第二关键字递减

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define rd read()
 5 #define R register
 6 #define N 1000005
 7 using namespace std;
 8 
 9 int n, k, Q;
10 int d[N], f[N], q[N];
11 
12 inline int read() {
13     int X = 0, p = 1; char c = getchar();
14     for (; c > '9' || c < '0';c = getchar())
15         if (c == '-') p = -1;
16     for (; c >= '0' && c <= '9'; c = getchar())
17         X = X * 10 + c - '0';
18     return X * p;
19 }
20 
21 int main()
22 {
23     n = rd;
24     for (R int i = 1; i <= n; ++i) d[i] = rd;
25     Q = rd; 
26     for (; Q; Q--) {
27         k = rd;
28         int l = 1, r = 1;
29         q[l] = 1;
30         for (R int i = 2; i <= n; ++i) {
31             while (l <= r && q[l] < i - k) l++;
32             f[i] = f[q[l]] + (d[q[l]] <= d[i] ? 1 : 0);
33             while (l <= r && (f[q[r]] > f[i] || (f[q[r]] == f[i] && d[q[r]] <= d[i]))) r--;
34             q[++r] = i;
35         }
36         printf("%d\n", f[n]);
37     }
38 }
View Code

相关文章: