【LOJ#6029】市场(线段树)】的更多相关文章

题目描述 从前有一个贸易市场,在一位执政官到来之前都是非常繁荣的,自从他来了之后,发布了一系列奇怪的政令,导致贸易市场的衰落. 有 \(n\) 个商贩,从\(0 \sim n - 1\) 编号,每个商贩的商品有一个价格\(a_i\),有两种政令: \(l, r, c\),对于\(i \in [l, r], a_i \leftarrow a_i + c\) \(l, r, d\),对于\(i \in [l, r], a_i \leftarrow \lfloor {a_i}/{d} \rfloor\…
题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有四种:区间加.区间下取整除.区间求最小值.区间求和. $n\le 100000$ ,每次加的数在 $[-10^4,10^4]$ 之间,每次除的数在 $[2,10^9]$ 之间. 题解 线段树+均摊分析 和 [uoj#228]基础数据结构练习题 类似的均摊分析题. 对于原来的两个数 $a$ 和 $b$ ( $a>b$ ) ,原来的差是 $a-b$ ,都除以 $d$ 后的差是 $\frac{a-b}d$ ,相当于差也除了 $d$…
Prelude 题目链接:萌萌哒传送门(/≧▽≦)/ Solution 如果完全离线的话,可以直接用时间线段树分治来做,复杂度\(O(qv \log q)\). 现在在线了怎么办呢? 这其实是个假在线,因为每个物品的删除时间已经给你了,所以还是直接用时间线段树分治来做. 其实我是重点想谈一下复杂度的,\(O(n^{2} \log n)\)的复杂度居然都可以出到\(15000\),而且居然还跑的飞快? Code #include <cstring> #include <algorithm&…
题意 链接 Sol 势能分析. 除法是不能打标记的,所以只能暴力递归.这里我们加一个剪枝:如果区间内最大最小值的改变量都相同的话,就变成区间减. 这样复杂度是\((n + mlogn) logV\)的. 简单的证明一下:如果没有加的话,每个节点会被除至多log次, 总会除4nlogn次,每次区间加会恢复log个点的势能函数,这样总递归次数就是\(nlog^2n\). 下传标记的时候别忘了把min和max都更新一下 #include<bits/stdc++.h> #define Pair pai…
考虑到每次除法,然后加法,差距会变小,于是维护加法lazytag即可 #include <cstdio> #include <cmath> #define int long long int read() { int x = 0; bool f = 0; char c = getchar(); while (c < 48) f ^= (c == '-'), c = getchar(); while (c > 47) x = x * 10 + (c - 48), c =…
老师说,你们暴力求除法也整不了多少次就归一了,暴力就好了(应该只有log(n)次) 于是暴力啊暴力,结果我归天了. 好吧,在各种题解的摧残下,我终于出了一篇巨好看(chou lou)代码(很多结构体党嫌丑) 那么具体除法怎么实现就是关键了 对于单个点或者区间内的数完全相同的区间,可以做成区间减法 因为除法会使数变小,而相同的数减小的量是相同的, 那么怎么判断区间内的数是否完全相同呢? 可以维护一个区间最小与区间最大,如果一个区间内最小数等于最大数,那么显然这个区间内所有数相等 区间最小与区间最大…
[LOJ#6029]市场(线段树) 题面 LOJ 题解 看着就是一个需要势能分析的线段树. 不难发现就是把第二个整除操作化为减法. 考虑一下什么时候整除操作才能变成减法. 假设两个数为\(a,b\).那么就有\(\displaystyle a-[\frac{a}{d}]=b-[\frac{b}{d}]\). 那么假设\(a,b\)整除的结果分别为\(aa,bb\).\(a=d*aa+p_a,b=d*bb+p_b\) 得到:\(\displaystyle (d-1)aa+p_a=(d-1)bb+p…
[LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l r c 给 \([l,r]\) 区间内的值全部加上 \(c\). 2 l r d 给 \([l,r]\) 区间内的值全部除以 \(d\), 向下取整. 3 l r 求 \([l,r]\) 区间内的最小值. 4 l r 求 \([l,r]\) 区间内的值之和. \(n,q\le 1\times 10…
原文链接www.cnblogs.com/zhouzhendong/p/ZJOI2019Day1T2.html 前言 在LOJ交了一下我的代码,发现它比选手机快将近 4 倍. 题解 对于线段树上每一个节点,维护以下信息: 1. 这个点为 1 的概率. 2. 这个点为 0 ,且它有祖先是 1 的概率. 其中,第一种东西在维护了 2. 的情况下十分好求. 第二种东西,只有两类: 1. 一次线段树操作涉及到所有的节点,显然只要乘 0.5 . 2. 某些节点打了标记之后,它的所有子孙都被他影响了.于是我们…
LOJ 洛谷 先令编号从\(1\)开始.我们要求\([1,i]\)这些数字能否构成一个矩形. 考虑能否用线段树维护,让每个叶子节点\(i\)表示前\(i\)个数能否构成矩形. 一种方法是维护前\(i\)个点最左上点和最右下点的坐标,直接判断这两个点构成的矩形面积是否是\(i\). 发现修改的时候这个最值不好维护,每次修改可能是\(O(n)\)的. 考虑合法矩形的特征.把前\(i\)个点标记为黑点,其余点是白点.那么前\(i\)个点构成了一个矩形当且仅当: 左边和上边都是白点的黑点有且只有一个.…