一眼看上去这个题就要DP,可是应该怎么DP呢,我们发现,数据范围最多支持O(NlogN),但是这种DP貌似不怎么有,所以应该是O(N)算法,自然想到单调队列优化DP。

然后我们先考虑如果不用单调队列应该怎么转移,那么f[i]=min(f[k]) (i-k>m)+(a[k]<=a[i])。而min(f[k])可以用单调队列求出。

然后就是之后的几个错误点:

1.一定不能看反不等号的方向。。

2.队头要先设置为1,此题因为可以事先直接入队第一个所以把队尾也设置成1.

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define re register
#define wc 0.0000000001
using namespace std;
int f[],a[],s[],ans,m,n,x,q[];
int main()
{
cin>>n;
for(re int i=;i<=n;i++)
{
cin>>a[i];
s[i]=s[i-]+a[i];
}
cin>>m;
for(re int i=;i<=m;i++)
{
cin>>x;
f[]=;
int h=,t=;
q[t]=;
for(re int j=;j<=n;j++)
{
while(h<=t&&j-q[h]>x)
h++;
f[j]=f[q[h]]+(a[q[h]]<=a[j]);
while(h<=t&&(f[j]<f[q[t]]||(f[j]==f[q[t]]&&a[j]>=a[q[t]])))
t--;
q[++t]=j;
}
cout<<f[n]<<endl;
}
}

最新文章

  1. ApexSQLLog可以只读取ldf文件
  2. 【Java EE 学习 29 上】【PL/SQL】【存储过程】【存储函数】【触发器】
  3. app进入后台之后接收到通知,点进去进入新的页面,再次进入后台,再点击通知进入页面(,两次通过通知进入的页面,创建了两次,会多一个页面,)解决办法监听
  4. ASP.NET MVC显示HTML字符串
  5. innodb_buffer_pool_size 大小建议
  6. js DOM的几个常用方法
  7. C# static方法-使用迭代器循环遍历文件中的额行
  8. Sqlstate解释
  9. xml初读
  10. 基于SAE+CodeIgniter3.0+管理端angularjs+前台amazeui的多用户博客系统V1.0--系统设计(一)
  11. 关于KeilC51的指针(参见, page 106-113, keil uv2 user&#39;s guide 09,2001)
  12. MFC中DoDataExchange()的作用
  13. ORACLE存储过程笔记2
  14. [C#] out vs ref
  15. Pandas之Dataframe叠加,排序,统计,重新设置索引
  16. Localization
  17. 207. Course Schedule
  18. Linux Kernel Programming - Time,Delays,and Deferred Work
  19. Python3.6.2在线安装pymysql模块
  20. 关于EL表达式取值的问题

热门文章

  1. dva解读1
  2. 服务器之FRU
  3. R-ArcGIS探秘(1)安装以及Sample执行
  4. PHPthinking邀请您一起赚Money
  5. libnids介
  6. Spring整合Velocity模版引擎
  7. POJ 2485 Highways【最小生成树最大权——简单模板】
  8. 封装AFNetworking
  9. PHP-Heredoc用法:&lt;&lt;&lt;EOFEOF;
  10. ASP非法赋值