有 n 个数,以及 p,q,r

要求找到三个数  使得  最大,其中  

由于题目具有后效性,开始没有注意到,枚举 i∈[1,n] 使得 a[i]*p,然后用线段树找到 j∈[i,n] 使得 a[j]*q,再找到 k∈[j,n] 使得 a[k]*r,但是这样的做法是不对的,只能过到 12 个样例

因为每一步都是最优的,并不能代表整体最优

如果枚举 j,在从区间 [1,j] 和 [j,n] 分别找 i 和 k 的话这样是正确的,其余上述的做法不同的是,上述做法没有考虑后效性而缩小了区间范围,而这样枚举所有情况全部考虑到了

const int N=1e5+5;int n,m;int i,j,k;int a[N];struct Node{int l,r;pll maxx,minn;#define lson id<<1#define rson id<<1|1}t[N<<2];void push_up(int id)
{t[id].maxx=max(t[lson].maxx,t[rson].maxx);t[id].minn=min(t[lson].minn,t[rson].minn);
}void build(int l,int r,int id)
{t[id].l=l,t[id].r=r;if(l==r){ t[id].maxx={a[l],l},t[id].minn={a[l],l}; return ; }else {int mid=l+r>>1;build(l,mid,lson);build(mid+1,r,rson);push_up(id);}
}pll query(int l,int r,int id,ll tag)
{int L=t[id].l,R=t[id].r;if(L>=l && r>=R) return tag>0?t[id].maxx:t[id].minn;else{int mid=L+R>>1;if(tag>0){pll ans={-9e18,l};if(mid>=l) ans=max(ans,query(l,r,lson,tag));if(r>=mid+1) ans=max(ans,query(l,r,rson,tag));return ans;} else{pll ans={9e18,l};if(mid>=l) ans=min(ans,query(l,r,lson,tag));if(r>=mid+1) ans=min(ans,query(l,r,rson,tag));return ans;}}
}int main()
{ll p,q,r;while(~sd(n)){sll(p),sll(q),sll(r);forn(i,1,n) sd(a[i]);build(1,n,1);//forn(i,1,n) dbg(query(i,n,1,1).first);ll ans,maxx=-9e18;for(int i=1;i<=n;i++){ans=q*a[i];if(p){pll tmp=query(1,i,1,p);ans+=p*tmp.first;}if(r){pll tmp=query(i,n,1,r);ans+=r*tmp.first;}maxx=max(maxx,ans);}pll(maxx);}//PAUSE;return 0;
}

Manthan, Codefest 17 B. Marvolo Gaunt‘s Ring(线段树+思维)相关推荐

  1. B. Marvolo Gaunt’s Ring (递推)

    B. Marvolo Gaunt's Ring 题目链接 大致题意: 给你三个数 p,q,r,然后给你给你一个有序的序列,让你在序列中跳出三个数i,j,k(i <=j<=k)使得 p*a[ ...

  2. Marvolo Gaunt's Ring 【CodeForces 855B】

    Marvolo Gaunt's Ring 求p * i + q * j + r * k(i<=j<=k)的最大值 虽然题中给的时间比较长但还是不可以用直接暴力用三次for循环,一定可以用一 ...

  3. Marvolo Gaunt's Ring(类似于dp的做法)

    题目:(题目传送门) Professor Dumbledore is helping Harry destroy the Horcruxes. He went to Gaunt Shack as he ...

  4. Marvolo Gaunt's Ring ---CodeForces - 855B(思维题)

    题目链接:http://codeforces.com/problemset/problem/855/B Marvolo Gaunt's Ring Professor Dumbledore is hel ...

  5. Codeforces 855B - Marvolo Gaunt's Ring

    855B - Marvolo Gaunt's Ring 思路:①枚举a[j],a[i]和a[k]分别用前缀最小值最大值和后缀最小值和后缀最大值确定. ②dp,dp[i][j]表示到第j为止,前i+1个 ...

  6. Marvolo Gaunt's Ring CodeForces - 855B+线段树+维护区间最大值和最小值

    题目链接: Marvolo Gaunt's Ring CodeForces - 855B 题目大意: 给定一段序列:a1,a2,a3,--an, 给定三个数:p,q,r(注意数据范围,代码里ans=- ...

  7. codeforces 855-B. Marvolo Gaunt's Ring

    http://codeforces.com/problemset/problem/855/B 这个题一开始读错了没想到要按顺序之后看到这个就像枚举但是数据太大...emmm然后就有点蒙. 后来看了题解 ...

  8. CodeForces - 855B - Marvolo Gaunt's Ring(线段树 or DP)

    题目:CodeForces - 855B 题解: 1.用dp做的: dp[0][i]是前i个p*a[i]的最大值, dp[1][i]是在dp[0][i]的基础上加上q*a[i]的最大值,这样可以保证j ...

  9. 【ST】【CF855B】 Marvolo Gaunt's Ring

    传送门 Description 给定三个数 \(p~,~q~,~r~\),以及一个数组 \(a\), 找出三个数 \(i~,~j~,~k\) ,其中 \(i~\leq~j~\leq~k\) 最大化 \ ...

最新文章

  1. group by 字句的扩展+rollup字句+cube字句+grouping()函数
  2. Apache TinkerPop毕业成为顶级项目
  3. 下载文件旁边附的MD5/SHA256等有什么用途?
  4. 十一、非规则组织分析及其数学模型——芦席斜纹组织
  5. 程序员面试金典 - 面试题 17.18. 最短超串(双指针+哈希)
  6. 接受字符串参数,返回一个元组,并分别统计字符串中大小写的个数
  7. MySQL----数据的显示位宽
  8. Hbase常用基础命令
  9. 图像局部特征(一)--概述
  10. 软件测试报告 图书管理系统,图书管理系统报告 图书馆管理系统报告
  11. 导出WPS office文档格式的说明
  12. Android 出海 Admob 踩坑
  13. 实验三mysql查询_实验三 数据库的查询实验
  14. Capstone 专注HDMI转VGA DP转VGA DP转HDMI DP转LVDS TYPEC转HDMI拓展方案+设计PCB板图
  15. SpringCloud微服务网关技术——Gateway网关的使用
  16. 问题 J: Frosting on the Cake
  17. 花火之声不闻于耳 [线段树]
  18. 如何评估个人的软件开发能力
  19. Java父子二人求父子年龄_六年级数学年龄问题应用题练习2013
  20. 深红色房间(密室逃脱1)攻略

热门文章

  1. 题目 1566: 贪吃的大嘴
  2. 服务器的创意工坊文件,Steam 创意工坊实现指南
  3. 数组的创建和初始化(C语言)
  4. 164. Maximum Gap 1
  5. OpenCV从上到下的顺序查找轮廓
  6. 2.使用Gateway实现token校验
  7. 【转载】区块链-概述
  8. [解读REST] 1.REST的起源
  9. minio断点续传方案
  10. 个人通讯录系统——数据库课程设计