区间的价值

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 844    Accepted Submission(s): 398

Problem Description
我们定义“区间的价值”为一段区间的最大值*最小值。

一个区间左端点在L

,右端点在R

,那么该区间的长度为(R−L+1)

现在聪明的杰西想要知道,对于长度为k

的区间,最大价值的区间价值是多少。

当然,由于这个问题过于简单。

我们肯定得加强一下。

我们想要知道的是,对于长度为1∼n

的区间,最大价值的区间价值分别是多少。

样例解释:

长度为1

的最优区间为2−2

答案为6∗6

长度为2

的最优区间为4−5

答案为4∗4

长度为3

的最优区间为2−4

答案为2∗6

长度为4

的最优区间为2−5

答案为2∗6

长度为5的最优区间为1−5

答案为1∗6

 
Input
多组测试数据

第一行一个数n(1≤n≤100000)

第二行n

个正整数(1≤ai≤109)

,下标从1

开始。

由于某种不可抗力,ai

的值将会是1∼109

内<b style="color:red;">随机产生</b>的一个数。(除了样例)

 
Output
输出共n

行,第i

行表示区间长度为i

的区间中最大的区间价值。

 
Sample Input
5
1 6 2 4 4
 
Sample Output
36
16
12
12
6
 
Source
 
题意:中文题面  求长度为i 的区间中最大的区间价值。区间价值=区间最小值*区间最大值
 
题解:1.RMQ 记录每个区间的最大值
         2.滑窗处理以a[i]为最小值的左右边界
         3.那么对于 一个答案 a[i]*rmq(l[i],r[i]) 为此长度的答案,我们可以发现他是可以更新到小于其长度的所有长度答案的
      
 #include<bits/stdc++.h>
#define ll __int64
using namespace std;
ll f[][];
ll a[];
ll l[];
ll r[];
ll n;
ll ans[];
ll aa[];
void rmq_init()
{
for(int j=;(<<j)<=n;j++)
for(int i=;i+(<<(j))-<=n;i++)
{
f[i][j]=max(f[i][j-],f[i+(<<(j-))][j-]);
}
}
int rmq(ll aa,ll bb)
{
ll k=;
ll ans1;
while((<<(k+))<=bb-aa+)
k++;
ans1=max(f[aa][k],f[bb-(<<k)+][k]);
return ans1;
} int main()
{
while(scanf("%I64d",&n)!=EOF)
{
for(int i=;i<=n;i++)
{
scanf("%I64d",&a[i]);
f[i][]=a[i];
}
rmq_init();
a[]=-;
a[n+]=-;
l[]=;
for(int i=;i<=n;i++)
{
int temp=i-;
while(a[temp]>=a[i])
temp=l[temp]-;
l[i]=temp+;
}
r[n]=n;
for(int i=n-;i>=;i--)
{
int temp=i+;
while(a[temp]>=a[i])
temp=r[temp]+;
r[i]=temp-;
}
memset(ans,,sizeof(ans));
memset(aa,,sizeof(aa));
for(int i=;i<=n;i++)
{
ll mm=rmq(l[i],r[i]);
ans[r[i]-l[i]+]=max(ans[r[i]-l[i]+],mm*a[i]);
}
for(int i=n;i>=;i--)
aa[i]=max(ans[i],aa[i+]);
for(int i=;i<=n;i++)
printf("%I64d\n",aa[i]);
}
return ;
}

HDU 5696 RMQ+滑窗的更多相关文章

  1. HDU 6319.Problem A. Ascending Rating-经典滑窗问题求最大值以及COUNT-单调队列 (2018 Multi-University Training Contest 3 1001)

    2018 Multi-University Training Contest 3 6319.Problem A. Ascending Rating 题意就是给你长度为k的数列,如果数列长度k<n ...

  2. 【10.7校内测试】【队列滑窗】【2-sat】【贪心+栈二分+线段树(noip模拟好题)】【生日祭!】

    比较好想的一道题,直接用队列滑窗,因为扫一遍往队列里加东西时,改变的只有一个值,开桶储存好就行了! #include<bits/stdc++.h> using namespace std; ...

  3. matlab核函数与滑窗

    在处理图像时,为了提取特征,经常用各种核函数和图像进行卷积,其实就是通过一个矩阵以滑窗的形式与原图像进行点乘求和,可以看作对一个像素和附近像素进行了加权平均. 比如经常用3x3的近似高斯卷积核 0 1 ...

  4. TCP系列31—窗口管理&流控—5、TCP流控与滑窗

    一.TCP流控 之前我们介绍过TCP是基于窗口的流量控制,在TCP的发送端会维持一个发送窗口,我们假设发送窗口的大小为N比特,网络环回时延为RTT,那么在网络状况良好没有发生拥塞的情况下,发送端每个R ...

  5. 计蒜客 A2232.程序设计:蒜厂年会-单调队列(双端队列(STL deque)实现)滑窗维护最小前缀和

    程序设计:蒜厂年会 问答问题反馈 只看题面 16.79% 1000ms 262144K   在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币. ...

  6. [poj 3261]后缀数组+滑窗最小值

    题目链接:http://poj.org/problem?id=3261 这个是可以交叉的重复串,所以用height就可以了,但是题目说让重复k次以上,也就是直接做一个k-1长度的滑窗最小值,从这些最小 ...

  7. UVA 1619/POJ2796 滑窗算法/维护一个单调栈

    Feel Good Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 12409   Accepted: 3484 Case T ...

  8. 集训第四周(高效算法设计)K题 (滑窗问题)

    UVA 11572 唯一的雪花 题意:给你从1到n的数组,要求求得其中的最长连续不重复子序列,经典的滑窗问题,方法是维护一个窗口,设置左框和右框,然后不断的进行维护和更新 方法一: #include& ...

  9. TCP的可靠传输机制(简单好理解:分段与流,滑窗,连接,流量控制,重新发送,堵塞控制)

    TCP的几大模块:分段与流,滑窗,连接,流量控制,重新发送,堵塞控制. 1.checksum:在发送TCP报文的时候,里面的信息可能会因为环境的问题,发送变化,这时,接收信号的时候就需要通过check ...

随机推荐

  1. 如何让图片相对于上层DIV始终保持水平、垂直都居中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 5-15 笔记 jtopo使用

    Jtopo的核心对象有6个,分别是Stage(舞台对象),Scene(场景对象),Node(节点对象),Link(连线对象),Container(容器对象),Effect.Animate(动画效果) ...

  3. js数据结构处理--------扁平化数组处理为树结构数据

    将扁平化的数组处理为树结构数据,我们可以利用对象来处理,对象的复制是浅拷贝,指向相同的内存地址: var arr = [ { id: 0, pid: -1, name: 'sadas' }, { id ...

  4. detection in video and image

    video中的detection,背景更加复杂,目标更加不聚焦,同时由于图片分辨率低于图像,因此更加难做. image中的Detection,背景相对简单些,目标更加聚焦,同时图片分辨率高,因此更加容 ...

  5. Apache服务器的安装和配置

    启动 Apache,让别人可以使用你机器上安装的 Apache 提供的 Web 服务,访问你机器上的网站.这种情况下你的机器就是服务器,别人的机器就是客户端 appsevApache服务器的基本安装 ...

  6. [NOI2007]货币兑换Cash

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 6353  Solved: 2563[Submit][Status][Discuss] Descriptio ...

  7. LOJ#6342. 跳一跳(期望)

    题意 $n \leqslant 10^5$ Sol 随便推一推就好了吧.. $f[i] = \frac{f[i] + f[i +1] + \dots f[n]}{n - i + 1} + 1$ 移一下 ...

  8. (77)zabbix主动、被动检测的详细过程与区别

    zabbix agent检测分为主动(agent active)和被动(agent)两种形式,主动与被动的说法均是相对于agent来讨论的.简单说明一下主动与被动的区别如下: 主动:agent请求se ...

  9. Linux-准备工作

    首先安装一个box,安装一个centos7,然后就是xshell,接下来就是 查看ip ifconfig ip addr vi /etc/sysconfig/network-scripts/ifcfg ...

  10. PHP 对象基础知识

    最近开始重新学习对象知识,其实也算是初步深入学习对象和设计模式,希望自己会坚持下去,保持更新 初识PHP对象 还记得,刚开始学习 PHP 的时候,学到到方法和对象时有一个很大的疑问,对象与方法相比较那 ...