「SCOI 2018 D2T1」Pipi 酱的日常
传送门
problem
给定 nnn 个数,第 i(1≤i≤n)i(1\le i\le n)i(1≤i≤n) 个位置上的值为 xix_ixi,有 mmm 个操作,操作有以下两种:
- 1 pos v:将 xxx 数组中位置 pospospos 上的数字改为 vvv;
- 2 l r u:选择 xxx 数组 [l,r][l,r][l,r] 中的某连续三个数加 uuu,新得到的数组称为 yyy,求所有可能形成的 yyy 数组的各元素绝对值之和的最大值(操作 222 不会改变 xxx 数组)。
数据范围:3≤n,m≤1053\le n,m\le 10^53≤n,m≤105。
solution
由于会有三个绝对值的变化,设 ∣a∣+∣b∣+∣c∣→∣a+u∣+∣b+u∣+∣c+u∣|a|+|b|+|c|\rightarrow |a+u|+|b+u|+|c+u|∣a∣+∣b∣+∣c∣→∣a+u∣+∣b+u∣+∣c+u∣,考虑暴力拆开:
+a+v+b+v+c+v=a+b+c+3v−a−v+b+v+c+v=−a+b+c+v+a+v−b−v+c+v=a−b+c+v−a−v−b−v+c+v=−a−b+c−v+a+v+b+v−c−v=a+b−c+v−a−v+b+v−c−v=−a+b−c−v+a+v−b−v−c−v=a−b−c−v−a−v−b−v−c−v=−a−b−c−3v\begin{aligned} +a+v+b+v+c+v&=a+b+c+3v\\ -a-v+b+v+c+v&=-a+b+c+v\\ +a+v-b-v+c+v&=a-b+c+v\\ -a-v-b-v+c+v&=-a-b+c-v\\ +a+v+b+v-c-v&=a+b-c+v\\ -a-v+b+v-c-v&=-a+b-c-v\\ +a+v-b-v-c-v&=a-b-c-v\\ -a-v-b-v-c-v&=-a-b-c-3v \end{aligned}+a+v+b+v+c+v−a−v+b+v+c+v+a+v−b−v+c+v−a−v−b−v+c+v+a+v+b+v−c−v−a−v+b+v−c−v+a+v−b−v−c−v−a−v−b−v−c−v=a+b+c+3v=−a+b+c+v=a−b+c+v=−a−b+c−v=a+b−c+v=−a+b−c−v=a−b−c−v=−a−b−c−3v
暴力维护一下以上 888 种结果,最后的答案一定是最大的那个。用线段树维护即可。
时间复杂度 O(nlogn)O(n\log n)O(nlogn)。
code
#include<bits/stdc++.h>
#define N 100005
#define ll long long
using namespace std;
int n,m;
ll a[N],SUM,val,ans;
int K[8][4]={1, 1, 1, 3,1, 1,-1, 1,1,-1, 1, 1,-1, 1, 1, 1,1,-1,-1,-1,-1, 1,-1,-1,-1,-1, 1,-1,-1,-1,-1,-3
};
ll Abs(ll x) {return x>0?x:-x;}
namespace SGT{ll mx[N<<2][10];void pushup(int root){for(int i=0;i<8;++i)mx[root][i]=max(mx[root<<1][i],mx[root<<1|1][i]);}#define mid ((l+r)>>1)void build(int root,int l,int r){if(l==r){for(int i=0;i<8;++i)mx[root][i]=K[i][0]*a[l]+K[i][1]*a[l+1]+K[i][2]*a[l+2]-Abs(a[l])-Abs(a[l+1])-Abs(a[l+2]);return;}build(root<<1,l,mid),build(root<<1|1,mid+1,r);pushup(root);}void Modify(int root,int l,int r,int pos){if(l==r){for(int i=0;i<8;++i)mx[root][i]=K[i][0]*a[l]+K[i][1]*a[l+1]+K[i][2]*a[l+2]-Abs(a[l])-Abs(a[l+1])-Abs(a[l+2]);return;}if(pos<=mid) Modify(root<<1,l,mid,pos);else Modify(root<<1|1,mid+1,r,pos);pushup(root);}ll Query(int root,int l,int r,int x,int y,int id){if(l>=x&&r<=y) return mx[root][id];if(y<=mid) return Query(root<<1,l,mid,x,y,id);if(x> mid) return Query(root<<1|1,mid+1,r,x,y,id);return max(Query(root<<1,l,mid,x,y,id),Query(root<<1|1,mid+1,r,x,y,id));}void update(int pos){if(pos>=1&&pos<=n-2) Modify(1,1,n-2,pos);if(pos>=2&&pos<=n-1) Modify(1,1,n-2,pos-1);if(pos>=3&&pos<=n ) Modify(1,1,n-2,pos-2);}#undef mid
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;++i) scanf("%lld",&a[i]),SUM+=Abs(a[i]);SGT::build(1,1,n-2);int op,pos,l,r;while(m--){scanf("%d",&op);if(op==1){scanf("%d%lld",&pos,&val);SUM-=Abs(a[pos]),a[pos]=val,SUM+=Abs(val),SGT::update(pos);}else{scanf("%d%d%lld",&l,&r,&val),ans=-1e15;for(int i=0;i<8;++i) ans=max(ans,SGT::Query(1,1,n-2,l,r-2,i)+K[i][3]*val);printf("%lld\n",ans+SUM);}}return 0;
}
「SCOI 2018 D2T1」Pipi 酱的日常相关推荐
- 【题解】LOJ2350:「JOI 2018 Final」月票购买
原题传送门 可以很套路地得到一个结论,答案与月票的路径有一段连续的重复路径 以 s , t , u , v s,t,u,v s,t,u,v为起点跑四次最短路 现在我们枚举两个月票最短路上的点 x , ...
- 2018 中国互联网哈哈榜之「十大 CP」
作者 | 刘兴亮 本文经授权转自刘兴亮时间(ID:liu_xingliang) 在互联网江湖中最有趣且最有看点的,还属江湖人物.相对于单个人物来说,组合更有看点,所以这篇文章就来给大家盘点一下,201 ...
- 337调查之「普遍排除令」简介及2018年度典型案例探讨
「咦?明明公司产品并没有在美国被告专利侵权,为何因为专利问题在美国海关被挡下来了?」这种看似不可思议的情形.在美国是很可能发生的,尤其是面向一般大众类型的消费性产品.这情况称背后的可能原因是因为该产品 ...
- 「JOISC 2018 Day 3」比太郎的聚会
「JOISC 2018 Day 3」比太郎的聚会 题意: 给你一个\(DAG\),若干组询问,每次给出一个终点和若干个点,问从给出点以外的点出发,到达终点的最长路.(\(|V|\leq 1e5 | ...
- LibreOJ 6514. 「雅礼集训 2018 Day10」文明【虚树+LCA】
6514. 「雅礼集训 2018 Day10」文明 [题目描述] 传送门 [题解] 考虑笨蛋的写法,可以用LCA求出1号和其他点的中点,然后DFS搜索Size大小即可,但是,复杂度显然要炸,但是我们会 ...
- Loj #6503. 「雅礼集训 2018 Day4」Magic
Loj #6503. 「雅礼集训 2018 Day4」Magic 题目描述 前进!前进!不择手段地前进!--托马斯 · 维德 魔法纪元元年. 1453 年 5 月 3 日 16 时,高维碎片接触地球. ...
- 国际象棋机器人夹断7岁男孩手指,原因是「棋手违反安全规则」?
机器之心报道 编辑:蛋酱 万幸的是伤势不重,这位 7 岁的棋手第二天回到了赛场,并照常完成了比赛. 据俄罗斯通讯社塔斯社报道,在上周的莫斯科国际象棋公开赛上,一个国际象棋机器人折断了一名 7 岁男孩的 ...
- 「AI 质检员」在富士通上岗,效率比人工高 25%
日本第一 IT 厂商富士通,于近日宣布开发了用于检测产品外观异常的 AI 技术,从而节省人力成本.材料成本等,同时也可节省声誉损失和退货/召回相关的成本,「无人工厂」已来. 来源 | Hyper超神经 ...
- 「留光」1小时:中科大让我们离「量子U盘」又近了一步
视学算法报道 转载自:机器之心 编辑:张倩.小舟 「简单来说,我们就是用一块晶体把光『存起来』,一个小时后取出来发现,它的相位.偏振等状态信息还保存得很好.」 存储器的功能就是把信息存储起来,直到需要 ...
最新文章
- 别再乱用 Prometheus 联邦了,分享一个 Prometheus 高可用新方案
- 【二叉树系列】二叉树课程大作业
- 2017.4.23 税收与补贴问题 思考记录
- LC5软件破解用户口令
- 常兴老师--华为公司营销课程设计专家
- Eclipse debug 的 drop to frame 的技巧
- 2021-08-26小白笔记
- 外卖行业现状分析_外卖行业生存现状分析:你还会点外卖吗?
- Behavior tree 编程实战
- Windows10+CentOS 7 双系统安装
- Realtek 1296 (RTD1296) OpenWRT Android 双系统全功能开发板
- 100首经典广告背景音乐
- 手机测试相关基础知识
- ReactNative基础(四)了解ListView的使用、实现GridView效果、编写一个真实网络请求案例
- 树莓派2model B 通过蓝牙实现A2DP协议连接手机播放音乐
- 如何使用开源工具「DataEase」制作一个高质量的仪表板
- 知网搜论文没有服务器响应,CNKI知网论文检测使用中的十四个常见问题
- Structured Streaming简介
- node操作文件夹复制与删除
- java-net-php-python-59jspm职工工作量统计系统计算机毕业设计程序