CodeForce 855B 暴力or线段树

题意

给你一串数,然后找出三个数,他们的前后关系和原来一样,可以相同,然后分别乘p,q,r,求他们积的和最大,并且输出这个数。

解题思路

  1. 这个可以使用线段树来做,找出区间内的最小值和最大值,如果x(代表pqr中的一个)小于零,就乘以这个区间的最小值,如果大于零,就乘以这个区间的最大值。然后\(j\)从1到n开始遍历。
  2. 或者可以暴力,不过这个暴力比一点重方法还要好,我看完就惊呆了,lxm大佬太强了。

代码实现

第一种:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
#include<cmath>
# define ls (rt<<1)
# define rs (rt<<1|1)
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f3f3f3f3f; //注意这里是8个3f,用来初始化用,很重要。
const int  maxn=1e5+7;
struct node{int l, r;ll ma, mi;
}t[maxn<<2];
ll num[maxn];
ll n, p, q, r;
void up(int rt)
{t[rt].ma=max(t[rt<<1].ma, t[rt<<1|1].ma);t[rt].mi=min(t[rt<<1].mi, t[rt<<1|1].mi);
}
void build(int rt, int l, int r)
{t[rt].l=l;t[rt].r=r;if(l==r){t[rt].ma=num[l];t[rt].mi=num[l];return ;}int  mid=(l+r)>>1;build(ls, l, mid);build(rs, mid+1, r);up(rt);
}
ll query_ma(int rt, int l, int r)//寻找区间最大值
{if(l <= t[rt].l && t[rt].r <= r){return t[rt].ma;}ll ans=-inf;int mid=(t[rt].l+t[rt].r)>>1;if(l<=mid) ans=max(ans, query_ma(ls, l, r));if(r>mid) ans=max(ans, query_ma(rs, l, r));return ans;
}
ll query_mi(int rt, int l, int r) //寻找区间最小值
{if(l <= t[rt].l && t[rt].r <= r){return t[rt].mi;}ll ans=inf;int mid=(t[rt].l+t[rt].r)>>1;if(l<=mid) ans=min(ans, query_mi(ls, l, r));if(r>mid) ans=min(ans, query_mi(rs, l, r));return ans;
}
int main()
{while(scanf("%lld%lld%lld%lld", &n, &p, &q, &r)!=EOF){for(int i=1; i<=n; i++){scanf("%lld", &num[i]);}build(1, 1, n);ll ans=-inf, tmp=0;for(int i=1; i<=n; i++) //遍历,这里的i就是题目中的j{tmp=0;if(p<=0){tmp+=p*query_mi(1, 1, i);}else tmp+=p*query_ma(1, 1, i);tmp+=q*num[i];if(r<=0){tmp+=r*query_mi(1, i, n);}else tmp+=r*query_ma(1, i, n);ans=max(ans, tmp);}printf("%lld\n", ans);}return 0;
}

第二种:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll inf=0x3f3f3f3f3f3f3f3f;int main()
{ll n, p, q, r, x;scanf("%lld%lld%lld%lld", &n, &p, &q, &r);ll m1=-inf, m2=-inf, m3=-inf;for(int i=1; i<=n; i++) //太巧妙了!{scanf("%lld", &x);m1=max(m1, x*p);m2=max(m2, m1+x*q);m3=max(m3, m2+x*r); }   printf("%lld\n", m3);return 0;} 

转载于:https://www.cnblogs.com/alking1001/p/11405848.html

CodeForce 855B 暴力or线段树相关推荐

  1. HDU - 6183 暴力,线段树动态开点,cdq分治

    B - Color itHDU - 6183 题目大意:有三种操作,0是清空所有点,1是给点(x,y)涂上颜色c,2是查询满足1<=a<=x,y1<=b<=y2的(a,b)点一 ...

  2. CF765F Souvenirs(暴力、线段树)

    解析 比较神奇的一道题. 考虑一个常规套路:把询问离线,移动右端点,维护左端点答案. 考虑暴力维护,对于当前的 ai=xa_i=xai​=x,左侧如图所示的这两条线上的点都可以产生新的可能答案. 容易 ...

  3. Acwing 4339 敌兵布阵 暴力 + 分块 + 线段树 + Zkw线段树 + 树状数组

    来一篇超全题解 数据结构大杂烩 原题连接 题目描述 敌人有 NNN 个工兵营地,编号 1∼N1∼N1∼N. 初始时,第 iii 个营地有 aia_iai​ 个人. 接下来有若干个命令,命令有 444 ...

  4. CDOJ 1292 卿学姐种花 暴力 分块 线段树

    卿学姐种花 题目连接: http://acm.uestc.edu.cn/#/problem/show/1292 Description 众所周知,在喵哈哈村,有一个温柔善良的卿学姐. 卿学姐喜欢和她一 ...

  5. BZOJ1858 [Scoi2010]序列操作 线段树

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1858 题意概括 lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1 ...

  6. 【地狱副本】数据结构之线段树Ⅲ——区间最值/赋值/修改/历史值操作(HDU5306,Tyvj 1518,【清华集训2015】V,HDU6315,HDU1828,POJ3162)

    文章目录 Gorgeous Sequence Tyvj 1518 CPU监控 [清华集训2015]V Naive Operations Picture Walking Race Gorgeous Se ...

  7. 和Leo一起做爱线段树的好孩子HDU5238 Calculator

    额 神仙题 感觉就是一个暴力啊 线段树维护的是一个类似于键值线段树的东西? 每个叶子节点才表示一个操作 而在PushUp的时候合并答案 这个咋合并? 暴力合并.我们记录下当前模意义下所有的答案 然后暴 ...

  8. CodeForces - 731D 80-th Level Archeology(线段树+暴力/差分)

    题目链接:点击查看 题目大意:给出 n 个数列,再给出一个模数 mod,每次操作可以将所有的数字进行:x = x %mod + 1 操作,问至少进行多少次操作,才能使得 n 个数列按照字典序非降序排列 ...

  9. [帝皇杯day 1] [NOIP2018模拟赛]小P的loI(暴力+素筛),【NOIP模拟赛】创世纪(贪心),无聊的数对(线段树)

    文章目录 T1:小P的lol title solution code T2:创世纪 title solution code T3:无聊的数对 title solution code T1:小P的lol ...

  10. HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Sub ...

最新文章

  1. 数据结构 -- 图与图存储
  2. 看完这些、你能体会到半导体与电路集成的伟大了吗?
  3. 异常:此数据库没有有效所有者,因此无法安装数据库关系图支持对象。
  4. c3p0 mysql maven_Maven+JSP+Servlet+C3P0+Mysql实现的音乐库管理系统
  5. 选择UPS电源的四大要素
  6. 冒泡排序选择排序 以及时间效率对比
  7. startup oracle 01012,ORA-01012:not logged on的解决办法
  8. echarts label固定位置_ECharts+百度地图网络拓扑应用
  9. python http 返回json中文乱码
  10. 编写分段函数子函数_我从编写六个函数中学到的全部都做相同的事情
  11. C++STL泛型编程基础知识讲解--------2015年2月3日
  12. OAF_VO系列3 - Binding Style绑定方式
  13. solr配置中文IK Analyzer分词器
  14. 虚拟化架构下虚拟交换机和分布式虚拟交换机解析
  15. Consolidation Mappings
  16. 有趣的Python Challenge编程解谜游戏攻略二(5-9关)
  17. 【IDEA】 弹出Server's certificate is not trusted 解决方法
  18. BZOJ 3687 简单题
  19. 架构师日常-团队管理
  20. VTK笔记-图形相关-线段平滑-vtkSplineFilter类

热门文章

  1. SpringApplication.run方法分析
  2. FreeDOS 24 周年,创始人分享常用 DOS 命令备忘表
  3. Cisco 证书查询
  4. 6.SpringMVC 配置式开发-处理器
  5. .Net中常用的几种ActionResult
  6. 几何画板构造象限平分线的步骤
  7. Linux中创建LVM详细步骤
  8. 【C面试】一道简单的C语言面试题的思考——打印星阵
  9. 爱尔兰圣三一大学计算机专业硕士,爱尔兰圣三一学院研究生申请要求
  10. 改变php默认目录结构,ThinkPHP中自定义目录结构的设置方法_PHP