5177: [Jsoi2013]贪心的导游 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 32  Solved: 15[Submit][Status][Discuss] Description 南京有一条著名的购物街.购物街嘛,就是一排整齐的商店啦~ 导游小Z每次都会把游客团带到购物街里走一段,然后选择一个商店进去购物.小Z接待的游客都是购物狂,他们恨 不得将店内的商品洗劫一空,也就是说,只要他们能买,就一定会继续买(钱够不够你不用考虑,他们都有…
首先预处理出对于每个模数,所有被模数按结果从大到小排序的结果,那么对于一个询问,如果可以在$O(1)$时间内判断某个数字是否出现,则可以$O(1000)$回答. 考虑对序列进行分治,对于区间$[l,r]$,取$mid=\lfloor\frac{l+r}{2}\rfloor$. 处理出$mid$到$[l,r]$内每个位置里每个数字的出现次数,回答所有经过$mid$的询问,然后递归分治$[l,mid)$和$(mid,r]$. 时间复杂度$O((n+m)\log n+1000m)$. #include…
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5177 在网上看到的题解基本都是用主席树,也就是带点骚操作的暴力直接艹过去的.这里分享一个比较清真的分块做法. 因为$ p , a_i $的值域较小,因此我们可以考虑把序列分成$ size $块,预处理出每个块内的数模每个$ p $的最大值,那么查询时只需查询区间中的整块答案,然后再统计零散的元素的贡献.预处理时,我们可以考虑对当前块维护一个数组$ last[i] $表示在当前块内出现…
「JSOI2013」贪心的导游 传送门 多次询问区间内%一个数的最大值 我们不妨设这个数为M_sea 值域比较小所以考虑分块维护. 我们观察到对于给定的一个 \(p\) ,函数 \(y = x \% p\) 是分段的且在各段内递增,所以我们可以先分块,记一下每个块内小于等于某个数的最大值,记为 \(g_i\) ,那么我们显然是要在所有的 \(i = kp - 1, k \ge 1\) 中查询 \(g_i\) 并减掉会被 % 掉的部分,那么我们就可以预处理出一个块内的答案了,然后查询的时候暴力查就…
题目链接:https://pintia.cn/problem-sets/1108203702759940096/problems/1108204121661857798 题目大意: 森森开了一家快递公司,叫森森快递.因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(编号.由于道路限制,第i号城市(,)与第(号城市中间往返的运输货物重量在同一时刻不能超过C​i​​公斤. 公司开张后很快接到了Q张订单,其中j张订单描述了某些指定的货物要从S​j​​号城…
传送门 一道有意思的题. 一开始想错了,以为一直lowerlowerlower_boundboundbound就可以解决询问,结果交上去TLE了之后才发现时间复杂度是错的. 但是贪心思想一定是对的,每次向前尽量推进一定可以得到最优解. 于是我想起了一道叫做弹飞绵羊的题,感觉这道题可以类比. 码了一会一直WA感觉不太对,发现有一个细节写错了233. A了之后在csdn上翻了翻题解. 发现都是倍增优化%%%,我被自己的低智商给蠢哭了,是啊连修改操作都没有分块很low啊. 不过还是讲讲如何分块吧. 对…
传送门 题解搬运工++ 先证明一个贪心做法的正确性:做以下操作若干次,每一次考虑选择没有被选到答案序列中的数加入到答案序列中对答案的贡献,设第\(i\)个位置的贡献为\(V_i\),如果最大的贡献小于0则退出,否则选择其中贡献最大的加入答案序列中. 首先一个引理:在上述贪心策略下,如果\(a_i\)>\(a_j\)且\(i\)<\(j\),则选\(i\)之前不可能选\(j\). 证明考虑归纳:\(i,j\)中间不存在被选中的元素时是平凡的,如果\(i,j\)中间存在\(p\)个选中的元素,若\…
既然题目中的要求满足二维偏序,那么我们很自然地想到将所有东西(草和牛)都读进来之后,对一维(美味度)排序,然后在另一维(价值)中取当前最小的. 于是,Splay.mutiset.权值分块什么的都支持查询后继呢. #include<cstdio> #include<cmath> #include<algorithm> using namespace std; ],f,c; inline void R(int &x){ c=;f=; ; ;c>=)+=(c-'…
据说正解是有上下界最小流,但是这种1e5的玩意问什么要跑网络流啊-- 贪心即可,注意一点是可以有多条路径经过一条边-- 以1为根,设d[u][0/1]为u到父亲的边是向下/向上,g记录这个点儿子中不能抵消且和它的d相同(同方向)的点个数,这里的抵消是一个0和一个1可以凑一条路径直接加进答案里,在dfs儿子的时候统计一下即可 #include<iostream> #include<cstdio> using namespace std; const int N=100005; int…
Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 2610  Solved: 1584[Submit][Status][Discuss] Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个不同的城市之间有且仅有一条直接或间接的道路.为了防止管理太过分散,每个省至少要有B…