poj2823 题目链接

长度为N的数组,求宽度k的滑动窗口在数组上滑动时窗口内的最大值或最小值

如果用单调队列做,求最小值时,队列应该严格递增的。所以插入时,队尾大于等于插入值的元素都应被舍弃,因为插入元素不仅小而且新,没有必要保留队尾这些又大又旧的元素。

/*
选C++交是5k多毫秒,但是G++就会超时。
*/
#include <cstdio>
#include <cstring>
const int N = ;
int data[N];
int o1[N],o2[N];
int q[N];
int n,k;
void getMin(){
int head,tail;
head = tail = ;
for(int i=;i<n;i++){
while((tail>head)&&data[q[tail-]]>data[i]) tail--;
q[tail++] = i;
if(i>=(k-)){
while((head<tail)&&q[head]<(i-k+)) head++;
o1[i-k+] = data[q[head]];
}
}
}
void getMax(){
int head,tail;
head = tail = ;
for(int i=;i<n;i++){
while((head<tail)&&(data[q[tail-]]<data[i])) tail--;
q[tail++] = i;
if(i>=(k-)){
while((head<tail)&&(q[head]<(i-k+))) head++;
o2[i-k+] = data[q[head]];
}
}
}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<n;i++) scanf("%d",data+i);
getMin();
getMax();
for(int i=;i<n-k+;i++) printf("%d ",o1[i]); puts("");
for(int i=;i<n-k+;i++) printf("%d ",o2[i]); puts("");
return ;
}

hdu3415 题目链接

长度为N的数组,长度小于等于K的非空子串的最大和。

求完前缀和后就转化成了窗宽为k的单调队列

#include <cstdio>
#include <cstring>
const int N = ;
const int INF = 0x0FFFFFFF;
int data[N],sum[N*];
int q[N*];
int n,k,total;
int minq(int &spos,int &epos){
int head,tail;
head = tail = ;
int ans = -INF;
for(int i=;i<total;i++){
while((head<tail)&&(sum[q[tail-]]>=sum[i-])) tail--;
while((head<tail)&&q[head]<i-k) head++;
q[tail++] = i-;
if((sum[i]-sum[q[head]]>ans)){
spos = q[head];
epos = i;
ans = sum[epos]-sum[spos];
}
}
return ans;
}
int main(){
int t;
for(scanf("%d",&t);t--;){
scanf("%d%d",&n,&k);
sum[] = ;
for(int i=;i<=n;i++){
scanf("%d",data+i);
sum[i]=sum[i-]+data[i];
}
for(int i=;i<k;i++) sum[n+i]=sum[n+i-]+data[i]; total = n+k;
int spos,epos;
int ans = minq(spos,epos);
spos++;
if(epos>n) epos-=n;
if(spos>n) spos-=n;
printf("%d %d %d\n",ans,spos,epos);
}
return ;
}

poj2823/hdu3415 - 数据结构 单调队列的更多相关文章

  1. POJ2823 Sliding Window(单调队列)

    单调队列,我用deque维护.这道题不难写,我第二次写单调队列,1次AC. -------------------------------------------------------------- ...

  2. hdu3415(单调队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3415 题意:一个长度为n包含正负整数的数环,即第1个的左边是第n个.从中选一个不超过k的序列,使得序列 ...

  3. poj2823一道纯单调队列

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 32099   Accepted: 9526 ...

  4. HDU3415【单调队列】

    单调队列解决通过维护满足条件内的值,并保证队列里的值单调,解决一个最大最小. 让你求一个k区间长度的最大值,那么就只要搞下前缀和, sum[ i , j ] 区间的和:sum[ j ]-sum[ i ...

  5. poj2823:单调队列入门题

    今天学习了一下单调队列这种数据结构,思想不是很难 参考资料:http://www.cnblogs.com/Jason-Damon/archive/2012/04/19/2457889.html 然后自 ...

  6. POJ2823 单调队列

    POJ2823 http://poj.org/problem?id=2823 最基础的单调队列,说是数据结构,其实就是一种更新数组数据的方法. 之前还准备用deque,超时了,直接head,tail快 ...

  7. POJ2823 Sliding Window (单调队列)

    POJ2823 Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 38342   Accepte ...

  8. 数据结构录 之 单调队列&单调栈。

    队列和栈是很常见的应用,大部分算法中都能见到他们的影子. 而单纯的队列和栈经常不能满足需求,所以需要一些很神奇的队列和栈的扩展. 其中最出名的应该是优先队列吧我觉得,然后还有两种比较小众的扩展就是单调 ...

  9. poj2823 单调队列初步

    什么是单调队列:头元素一直是队列当中的最大值,队列中的值按照递减顺序排列,可以从末尾插入一个元素,或从两段删除元素 1.插入元素,为了保证队列的单调性(这里假设为递减性),在插入元素v时要将对位的元素 ...

随机推荐

  1. RBAC介绍

    基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注.在RBAC中,权限与角色相关联,用户通过成为适当角色的成 ...

  2. html5plus 从相册选择图片后获取图片的大小

    plus.gallery.pick(function (filePath) { plus.io.resolveLocalFileSystemURL(filePath, function (entry) ...

  3. C# 热敏打印机 小票打印机 打印图片

    最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了. 这是DEMO的窗体: 下面是打印所需要调用的代码: 因为我们这里主要是打印条形码和二维码,所以以条形码和二维 ...

  4. 结构化数据、半结构化数据、非结构化数据——Hadoop处理非结构化数据

    刚开始接触Hadoop ,指南中说Hadoop处理非结构化数据,学习数据库的时候,老师总提结构化数据,就是一张二维表,那非结构化数据是什么呢?难道是文本那样的文件?经过上网搜索,感觉这个帖子不错 网址 ...

  5. 51nod 1325 两棵树的问题(最大权闭合子图)

    首先如果点权全都为正,就可以直接选所有的点. 活在梦里.. 考虑枚举一个点\(i\),作为我们选择的集合中的一个点. 然后我们把另一个点\(j\)选入集合的时候必须把两棵树中\(i\)和\(j\)路径 ...

  6. centos 7.1安装frees witch

    http://blog.sina.com.cn/s/blog_539d6e0c0102zgvm.html

  7. Spring Boot基础教程》 第1节工具的安装和使用

    <Spring Boot基础教程> 第1节 工具的安装和使用 Spring Boot文档 https://qbgbook.gitbooks.io/spring-boot-reference ...

  8. nessus 漏洞扫描安装和使用

    介绍 Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件.总共有超过75,000个机构使用Nessus 作为扫描该机构电脑系统的软件.  软件特色 * 提供完整的电脑漏洞扫描服务, 并随时更 ...

  9. windos环境python3.5安装 paramiko

    一.执行命令pip install paramiko,情况如下: C:\Users\ZFH>pip install paramikoCollecting paramiko  Downloadin ...

  10. OCUI界面设计:滚动视图与分页控件初探

    滚动视图(UIScrollView) 简单介绍 1.UIScrollView滚动视图能够排列并显示超出自身显示范围的内容. 2.UIScrollView内部整合了多种手势来达到丰富的界面展示效果. 3 ...