滑动窗口
来源:互联网 发布:大数据开发需要学多久 编辑:程序博客网 时间:2024/05/22 07:21
滑动窗口可以维护一串数列的单调性,也可以看作是单调栈(我觉得),具体刘汝佳的书上有写。
例题为Uva1619,单调栈+滑动窗口
题意:求一连续数列中 ,一段连续子序列a1到an 使(a1+ ... +an) * min(a1,...,an) 最大
#include <iostream>#include <string>#include <algorithm>#include <map>#include <cstdio>#include <cstring>const int maxn = 100000 + 5;using namespace std;int l[maxn],r[maxn];long long sum[maxn];long long num[maxn];int n;void solve(){ int left = 1,right = 1; long long ans = 0; for(int i=1; i<=n; i++) { long long temp = num[i] * ( sum[r[i]] - sum[l[i] - 1]); if(temp > ans || (temp == ans && (right - left > r[i] - l[i]))) { ans = temp; right = r[i]; left = l[i]; } } printf("%lld\n%d %d\n",ans,left,right);}int main(){ int case_ = 0; while(scanf("%d",&n)!=EOF && n) { memset(num,-1,sizeof(num)); //这句话没有是错的 for(int i=1; i<=n; i++) { scanf("%lld",&num[i]); sum[i] = num[i] + sum[i-1]; l[i] = i; r[i] = i; } for(int i=1; i<=n; i++) //更新每一个数左边维护的值 { while(num[l[i] - 1] >= num[i]) { l[i] = l[l[i] - 1]; //下标 } } for(int i=n; i>=1; i--) { while(num[r[i] + 1] >= num[i]) { r[i] = r[r[i] + 1]; } } if(case_) printf("\n"); case_++; solve(); } return 0;}
0 0
- 滑动窗口
- 滑动窗口
- 滑动窗口
- 滑动窗口。。
- 滑动窗口
- 窗口滑动
- 滑动窗口
- 滑动窗口
- 滑动窗口
- 滑动窗口
- 滑动窗口
- 滑动窗口
- 滑动窗口
- 滑动窗口
- 滑动窗口
- 滑动窗口
- 滑动窗口
- 滑动窗口
- 直播协议的选择:RTMP vs. HLS
- 使用DynamicGridView 加载主页图标时出现程序异常问题
- QFIL刷机
- 基于ARM9的汇编寄存器加载/存储指令
- 话
- 滑动窗口
- stm32f105rct6 使用ADC1 的 PC0、PC1、PC2、PC3、PC4通道 测电压
- 【Java TCP/IP Socket】UDP Socket(含代码)
- 第五讲:index7多个控制器.html
- 第九周leetcode题
- C++多态,虚函数
- argparse 中action参数
- Opencv安装
- OSG学习笔记26——创建HUD,并调用事件修改显示内容