CodeForce 855B 暴力or线段树
CodeForce 855B 暴力or线段树
题意
给你一串数,然后找出三个数,他们的前后关系和原来一样,可以相同,然后分别乘p,q,r,求他们积的和最大,并且输出这个数。
解题思路
- 这个可以使用线段树来做,找出区间内的最小值和最大值,如果x(代表pqr中的一个)小于零,就乘以这个区间的最小值,如果大于零,就乘以这个区间的最大值。然后\(j\)从1到n开始遍历。
- 或者可以暴力,不过这个暴力比一点重方法还要好,我看完就惊呆了,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线段树相关推荐
- HDU - 6183 暴力,线段树动态开点,cdq分治
B - Color itHDU - 6183 题目大意:有三种操作,0是清空所有点,1是给点(x,y)涂上颜色c,2是查询满足1<=a<=x,y1<=b<=y2的(a,b)点一 ...
- CF765F Souvenirs(暴力、线段树)
解析 比较神奇的一道题. 考虑一个常规套路:把询问离线,移动右端点,维护左端点答案. 考虑暴力维护,对于当前的 ai=xa_i=xai=x,左侧如图所示的这两条线上的点都可以产生新的可能答案. 容易 ...
- Acwing 4339 敌兵布阵 暴力 + 分块 + 线段树 + Zkw线段树 + 树状数组
来一篇超全题解 数据结构大杂烩 原题连接 题目描述 敌人有 NNN 个工兵营地,编号 1∼N1∼N1∼N. 初始时,第 iii 个营地有 aia_iai 个人. 接下来有若干个命令,命令有 444 ...
- CDOJ 1292 卿学姐种花 暴力 分块 线段树
卿学姐种花 题目连接: http://acm.uestc.edu.cn/#/problem/show/1292 Description 众所周知,在喵哈哈村,有一个温柔善良的卿学姐. 卿学姐喜欢和她一 ...
- BZOJ1858 [Scoi2010]序列操作 线段树
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1858 题意概括 lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1 ...
- 【地狱副本】数据结构之线段树Ⅲ——区间最值/赋值/修改/历史值操作(HDU5306,Tyvj 1518,【清华集训2015】V,HDU6315,HDU1828,POJ3162)
文章目录 Gorgeous Sequence Tyvj 1518 CPU监控 [清华集训2015]V Naive Operations Picture Walking Race Gorgeous Se ...
- 和Leo一起做爱线段树的好孩子HDU5238 Calculator
额 神仙题 感觉就是一个暴力啊 线段树维护的是一个类似于键值线段树的东西? 每个叶子节点才表示一个操作 而在PushUp的时候合并答案 这个咋合并? 暴力合并.我们记录下当前模意义下所有的答案 然后暴 ...
- CodeForces - 731D 80-th Level Archeology(线段树+暴力/差分)
题目链接:点击查看 题目大意:给出 n 个数列,再给出一个模数 mod,每次操作可以将所有的数字进行:x = x %mod + 1 操作,问至少进行多少次操作,才能使得 n 个数列按照字典序非降序排列 ...
- [帝皇杯day 1] [NOIP2018模拟赛]小P的loI(暴力+素筛),【NOIP模拟赛】创世纪(贪心),无聊的数对(线段树)
文章目录 T1:小P的lol title solution code T2:创世纪 title solution code T3:无聊的数对 title solution code T1:小P的lol ...
- HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Sub ...
最新文章
- 数据结构 -- 图与图存储
- 看完这些、你能体会到半导体与电路集成的伟大了吗?
- 异常:此数据库没有有效所有者,因此无法安装数据库关系图支持对象。
- c3p0 mysql maven_Maven+JSP+Servlet+C3P0+Mysql实现的音乐库管理系统
- 选择UPS电源的四大要素
- 冒泡排序选择排序 以及时间效率对比
- startup oracle 01012,ORA-01012:not logged on的解决办法
- echarts label固定位置_ECharts+百度地图网络拓扑应用
- python http 返回json中文乱码
- 编写分段函数子函数_我从编写六个函数中学到的全部都做相同的事情
- C++STL泛型编程基础知识讲解--------2015年2月3日
- OAF_VO系列3 - Binding Style绑定方式
- solr配置中文IK Analyzer分词器
- 虚拟化架构下虚拟交换机和分布式虚拟交换机解析
- Consolidation Mappings
- 有趣的Python Challenge编程解谜游戏攻略二(5-9关)
- 【IDEA】 弹出Server's certificate is not trusted 解决方法
- BZOJ 3687 简单题
- 架构师日常-团队管理
- VTK笔记-图形相关-线段平滑-vtkSplineFilter类