「雅礼集训」市场--势能线段树
题目链接:
https://loj.ac/p/6029
题意:
思路:
势能时间分析:
每次除数至少为2,所以一个数最多除log次,log次操作后一个区间就会相等,加法又需要log次使区间相等,所以使n个区间相等的复杂度是
区间除操作转化为区间减操作,当区间内最大值除完后与最小值除完后减小量相等,中间的数除完减小量也相等,相当于整个区间减少一样的值。
直接整数除不等于负数向下取整,要用floor((double)x/y)函数。
代码:
#include <bits/stdc++.h>using namespace std;typedef long long ll;
const int N=1e5+10;
typedef struct Node{int l,r;ll sum,ma,mi;ll lz;
}Node;
Node tr[N*4];
ll a[N];
int n,m;
void pushup(int u){tr[u].sum=tr[u<<1].sum+tr[u<<1|1].sum;tr[u].ma=max(tr[u<<1].ma,tr[u<<1|1].ma);tr[u].mi=min(tr[u<<1].mi,tr[u<<1|1].mi);
}
void build(int u,int l,int r){tr[u].l=l,tr[u].r=r;tr[u].lz=0;if(l==r){tr[u].sum=tr[u].ma=tr[u].mi=a[l];return ;}int mid=(l+r)>>1;build(u<<1,l,mid);build(u<<1|1,mid+1,r);pushup(u);
}
void tag_union(int fa,int u){ll len=tr[u].r-tr[u].l+1;ll k=tr[fa].lz;tr[u].sum+=k*len;tr[u].ma+=k;tr[u].mi+=k;tr[u].lz+=k;
}
void pushdown(int u){if(tr[u].lz!=0){tag_union(u,u<<1);tag_union(u,u<<1|1);tr[u].lz=0;}
}void div(int u,int l,int r,ll k){if(tr[u].l>=l&&tr[u].r<=r&&(tr[u].ma-floor((double)tr[u].ma/k))==(tr[u].mi-floor((double)tr[u].mi/k))){ll D=tr[u].ma-floor((double)tr[u].ma/k),len=tr[u].r-tr[u].l+1;tr[u].sum-=D*len;tr[u].lz-=D;tr[u].ma-=D;tr[u].mi-=D;return ;}pushdown(u);int mid=(tr[u].l+tr[u].r)>>1;if(l<=mid)div(u<<1,l,r,k);if(r>mid)div(u<<1|1,l,r,k);pushup(u);
}
void add(int u,int l,int r,ll k){if(tr[u].l>=l&&tr[u].r<=r){ll len=tr[u].r-tr[u].l+1;tr[u].sum+=k*len;tr[u].lz+=k;tr[u].ma+=k;tr[u].mi+=k;return ;}pushdown(u);int mid=(tr[u].l+tr[u].r)>>1;if(l<=mid)add(u<<1,l,r,k);if(r>mid)add(u<<1|1,l,r,k);pushup(u);
}
ll query_mi(int u,int l,int r){if(tr[u].l>=l&&tr[u].r<=r){return tr[u].mi;}ll res; bool ffg=true;pushdown(u);int mid=(tr[u].l+tr[u].r)>>1;if(l<=mid){res=query_mi(u<<1,l,r);ffg=false;}if(r>mid){if(ffg)res=query_mi(u<<1|1,l,r);elseres=min(res,query_mi(u<<1|1,l,r));}return res;
}
ll query_sum(int u,int l,int r){if(tr[u].l>=l&&tr[u].r<=r){return tr[u].sum;}ll res=0;pushdown(u);int mid=(tr[u].l+tr[u].r)>>1;if(l<=mid){res+=query_sum(u<<1,l,r);}if(r>mid){res+=query_sum(u<<1|1,l,r);}return res;
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);build(1,1,n);int op,l,r;ll k;while(m--){scanf("%d",&op);if(op==1){scanf("%d%d%lld",&l,&r,&k);l++,r++;add(1,l,r,k);}else if(op==2){scanf("%d%d%lld",&l,&r,&k);l++,r++;div(1,l,r,k);}else if(op==3){scanf("%d%d",&l,&r);l++,r++;printf("%lld\n",query_mi(1,l,r));}else{scanf("%d%d",&l,&r);l++,r++;printf("%lld\n",query_sum(1,l,r));}}
}
「雅礼集训」市场--势能线段树相关推荐
- 数据结构二之线段树Ⅱ——KiKi‘s K-Number,ball,The Child and Sequence,「雅礼集训 2017 Day1」市场,Atlantis
值域线段树+势能线段树+扫描线 KiKi's K-Number ball The Child and Sequence 「雅礼集训 2017 Day1」市场 Atlantis KiKi's K-Num ...
- #6029. 「雅礼集训 2017 Day1」市场(势能,区间除)
#6029. 「雅礼集训 2017 Day1」市场 用线段树维护数列,区间上维护最大最小值,区间和还有标记,修改时,区间加直接做,而区间除时,递归到线段树上某一区间,如果这一操作等价于区间加(也就是最 ...
- #6034. 「雅礼集训 2017 Day2」线段游戏 李超树
#6034. 「雅礼集训 2017 Day2」线段游戏 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统 ...
- [LOJ 6042]「雅礼集训 2017 Day7」跳蚤王国的宰相(树的重心+贪心)
[LOJ 6042]「雅礼集训 2017 Day7」跳蚤王国的宰相 description solution 一个到所有节点距离和最小的节点 ⇔\Leftrightarrow⇔ 树的重心(满足最重的儿 ...
- loj #6046. 「雅礼集训 2017 Day8」爷
#6046. 「雅礼集训 2017 Day8」爷 题目描述 如果你对山口丁和 G&P 没有兴趣,可以无视题目背景,因为你估计看不懂 -- 在第 63 回战车道全国高中生大赛中,军神西住美穗带领 ...
- 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 时,高维碎片接触地球. ...
- 【loj6029】「雅礼集训 2017 Day1」市场 线段树+均摊分析
题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有四种:区间加.区间下取整除.区间求最小值.区间求和. $n\le 100000$ ,每次加的数在 $[-10^4,10^4]$ 之 ...
- ZCUM-1948: #6029. 「雅礼集训 2017 Day1」市场 线段树区间更新
题目连接:点击打开链接 从前有一个贸易市场,在一位执政官到来之前都是非常繁荣的,自从他来了之后,发布了一系列奇怪的政令,导致贸易市场的衰落. 有 n nn 个商贩,从 0∼n−1 0 \sim n - ...
最新文章
- WAIC | Annotator 5.0标注平台盛大发布暨AI数据生态联盟成立
- 简洁好用的KDTree模板
- PYTHON——多线程:队列Queue数据结构
- Java 10 实战第 1 篇:局部变量类型推断
- pageSet的底层数据库存储逻辑
- 【TensorRT】将 PyTorch 转化为可部署的 TensorRT
- 算法 笔试的时候 如何输入元素?
- [振动力学]期中复习
- python实现数据恢复_数据恢复/电子取证 非常有用的python库——Construct | 学步园...
- Fragment的生命周期同一Activity下不同Fragment之间的通信
- jQuery学习笔记02
- 404 not found是什么意思
- 基于文件夹目录生成CHM电子书
- 网站打开速度优化-前端篇
- “土地信息+”能否激发千亿大数据应用市场
- java多线程并发之旅-34-性能与可伸缩性
- php表单数据类型,form表单中enctype属性的三种类型
- 小白兔写话_可爱的小白兔二年级写话
- $http与ajax的同步请求
- 2022-2028全球自动超声波仪器清洗器行业调研及趋势分析报告
热门文章
- ECCV2020 Piou Loss论文翻译
- 你知道平面设计岗位职责和内容都有哪些吗?
- 树莓派玩linux安装qq,树莓派怎么安装QQ
- 计算机桌面输入法没有了怎么办,输入法不见了怎么办,小编教你电脑输入法不见了怎么办...
- 2019中山纪念中学夏令营-Day14 图论初步【dijkstra算法求最短路】
- 用 html标签实现 word 的下标效果
- 熊猫烧香制造者出狱后开软件公司
- 商业地图 | 从肯德基地理分布浅析商业选址
- 福建区块链数字经济发展专项资金申报启动,最高可获300万 | 产业区块链发展周报...
- Python 实现快排