[POJ2796]Feel Good
2024-05-10 06:56:36
题目传送门:http://poj.org/problem?id=2796
这道题的话我用了RMQ和二分。
思想:用minm来表示区间[L,R]的最小值,很明显一个区间[L,R]能取得的最大值,要么就是[L,minm-1],要么就是[minm+1,R],还有就是整个区间的和乘最小值。
因为对于某两个最小值相等的区间来说(题目说明是非负整数),显然越大的区间取得的最大值越大。
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int maxn=100010; int num[maxn],n,sum[maxn],fmin[maxn][20],fmax[maxn][20]; long long ans=0,ansl,ansr;int querymin(int l,int r) {int k=0;if (l>r)return 0;while (1<<(k+1)<=r-l+1)k++;return min(fmin[l][k],fmin[r-(1<<k)+1][k]); }int querymax(int l,int r) {int k=0,tmp=0;if (l>r)return 0;while (1<<(k+1)<=r-l+1)k++;tmp=max(fmax[l][k],fmax[r-(1<<k)+1][k]);tmp=max(tmp,(sum[r]-sum[l-1])*querymin(l,r));if (tmp>ans){ans=tmp;ansl=l;ansr=r;}return tmp; }void findmin() //用RMQ求第i个到第j个这个区间的最小值是哪一个 {int i,j;memset(fmin,0x7f,sizeof(fmin));for (i=1;i<=n;i++)fmin[i][0]=i;for (j=1;(1<<j)<=n;j++)for (i=1;i+(1<<j)-1<=n;i++)if (num[fmin[i][j-1]]<num[fmin[i+(1<<(j-1))][j-1]])fmin[i][j]=fmin[i][j-1];else fmin[i][j]=fmin[i+(1<<(j-1))][j-1]; }void findmax() //表示求第i个到第j个这个区间能取得的最大值 {int i,j,l,r;memset(fmax,0,sizeof(fmax));for (i=1;i<=n;i++)fmax[i][0]=num[i]*num[i];for (j=1;(1<<j)<=n;j++)for (i=1;i+(1<<j)-1<=n;i++){r=i+(1<<j)-1;l=querymin(i,r);fmax[i][j]=max(querymax(i,max(i,l-1)),querymax(max(l+1,r),r));fmax[i][j]=max(fmax[i][j],(sum[r]-sum[i-1])*num[l]);if (fmax[i][j]>ans){ans=fmax[i][j];ansl=i;ansr=r;}} }int main() {int i,j;scanf("%d",&n);sum[0]=0;for (i=1;i<=n;i++){scanf("%d",&num[i]);sum[i]=sum[i-1]+num[i];}findmin();findmax();cout<<ans<<endl<<ansl<<" "<<ansr<<endl;return 0; }
转载于:https://www.cnblogs.com/Sun-Sea/p/5236834.html
[POJ2796]Feel Good相关推荐
- upc组队赛1 小C的数学问题【单调栈】(POJ2796)
小C的数学问题 题目描述 小C是个云南中医学院的大一新生,在某个星期二,他的高数老师扔给了他一个问题. 让他在1天的时间内给出答案. 但是小C不会这问题,现在他来请教你. 请你帮他解决这个问题. 有n ...
- POJ2796 Feel Good(单调栈)
题意: 给出一列数据,要求一个区间内最小值与区间内数据总和乘积最大值 要点: 还是单调栈,这次我自己写的,先做了几题比较简单的果然还是有效果的,这题也是一样,按点遍历,网上大神做的是直接遍历一次即可, ...
- div滚动到指定位置 vue_Vue列表实现滚动到指定位置样式改变
这个需求大概是这样子: 我做的一个聊天Demo,在搜索框搜索用户,可以滚动到指定的用户.然后成选中状态. 这是目前状态,我搜索南宫仆射 ,想要下面的用户列表直接滚动到 南宫仆射 并改变CSS样式. 查 ...
- 蒟蒻的ACM数据结构(四)-单调队列和单调栈
单调队列和单调栈 一.概念 二.实现 三.题目 单调队列 洛谷P1886 滑动窗口 解析 单调栈 [GXOI/GZOI2019]与或和 解析 POJ3250 Bad Hair Day 解析 POJ 2 ...
最新文章
- 1035 插入与归并
- 大学生职业生涯规划书性格特征_搞定职业生涯规划书,看这里!
- 作者:李崇纲,男,北京金信网银金融信息服务有限公司常务副总经理。
- java.sql.SQLException: 关闭的连接 解决办法
- python中__init__.py是干什么的
- 资源管理器停止工作,自动重启
- 我的第一个keil工具写的汇编
- 网站发布在中文操作系统,但ReportViewer的工具栏显示为英文的解决方法
- 粉丝关注数据库表的设计
- c#怎么拟合函数得到参数_c#怎么拟合函数得到参数_最小二乘法拟合任意次曲线(C#)...
- Word论文排版之样式的使用
- Kubernetes监控:Dashbaord 2.0.0部署方式
- Mov文件字幕添加与播放
- Web前端——JSP
- JAVA的continue用法
- 傅立叶级数和傅立叶变换是什么关系?
- 学会使用5W1H来写作博客
- 计算机公开课教学反思,公开课教学反思
- 【scala函数式编程】函数设计的通用结构——Monad
- 直布罗陀ICO规则着重市场驱动