CF765F Souvenirs】的更多相关文章

CF765F Souvenirs [CF765F]Souvenirs 主席树 - CQzhangyu - 博客园 其实不用主席树 感觉像是离线问题 但是不能支持差分.分治又处理不了 考虑按照右端点排序,线段树维护左端点为i的时候的答案 然后trick一下,把求ansl,变成求min(ansl....ansr),这样可以少更新很多 先把|ai-aj|变成j<i,aj>=ai这样找,然后再反过来做一次. 新加入的a[i],找之前第一个大于a[i]的a[pos],(pos是所在位置) 在pos位置更…
CF765F Souvenirs 题意翻译 给出\(n(2 \le n \le 10^5 )\) ,一个长为\(n\)的序列\(a(0 \le a_i \le 10^9 )\). 给出\(m(1\le m \le 2*10^5 )\),接下来\(m\)组询问. 每组询问给出一个\(l,r(1\le l < r\le n )\),代表询问最小的\(|a_i-a_j|\) 的值(\(l\le i <j\le r\) ,\(a_i\) 可以等于\(a_j\) ) 蒟蒻\(\tt{Dew}\)又双叒叕…
$ \color{#0066ff}{ 题目描述 }$ A县旁,连绵着一条长度为 n 的山脉,这条山脉由 n 座山峰组成,第 i 座山 峰的高度为 ai.作为著名的旅游县城,每天来到山脉游玩的旅客络绎不绝.但当 游客们去过了第一座山之后,就必须要先下山,再上第二座山.这实在是件很麻 烦的事,于是人们计划在山峰之间修建一些桥梁. 修建桥梁是件很麻烦的事.因为如果两座山峰的高度差太大的话,再在这两 座之间修建桥梁就显得有些不合适了.设计者们给出了 m 个计划,每个计划会 从区间\([l,r]\) 中选…
CF1039D You Are Given a Tree 容易发现,当 \(k\) 不断增大时,答案不断减小,且 \(k\) 的答案不超过 \(\lfloor\frac {n}{k}\rfloor\) ,因此不同的答案个数是 \(\sqrt n\) 级别的,可以用一种类似整体二分的方式求解. 对于一个 \(k\) ,从叶子节点贪心向上匹配即可得到答案. 点击查看代码 #include<bits/stdc++.h> using namespace std; int n; int ver[2000…
[CF765F]Souvenirs 题意:给你一个长度为n的序列{ai},有m个询问,每次询问给出l,r,问在所有$l\le x < y\le r$中,$|a_x-a_y|$的最小值是多少. $n\le 10^5,m\le 3\times 10^5,a_i\le 10^9$ 题解:网上的标程都是在线段树上搞一搞就完事了,但是我怎么看都觉得是$O(n\log^3n)$的.看官方题解,里面也没写具体做法.于是我一脸懵逼的情况下用了主席树来维护,起码保证了$O(n\log^2n)$的复杂度.(应该是做…
[CF765F]Souvenirs 题面 洛谷 题解 我们可以发现,对于某个右端点\(i\),左端点\(j\)在由\(i\rightarrow 1\)的过程中,每一段的答案是单调不增的,由这个性质,我们想办法维护出加入右端点\(i\)后的答案. 我们只考虑形如\(j<i,a_i<a_j\)的答案,因为其他的情况我们只需要将值域翻转即可得到答案. 根据我们上面的说法,你首先需要找到一个\(j\),使得\(a_j>a_i\)且\(j\)最大,这个可以用值域线段树维护.然后我们又要找到一个一个…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2126 题意:给你n个物品,m元钱,问你最多能买个多少物品,并且有多少种解决方案. 一开始想到的是,先解决给m元钱因为我花的钱少就一定能购买够多的物品,因此是个贪心算法. 记买最多的物品数为c. 然后就是设计状态dp[i][j]代表我从前i个物品里花了j元钱,买c个物品有多少种方案. 后来发现状态维数不够,得重新想想. 于是就想到: 设计状态dp[i][j][k]代表我从前i个物品里买了j个,花的钱不…
题意:给出t组数据 每组数据给出n和m,n代表商品个数,m代表你所拥有的钱,然后给出n个商品的价值 问你所能买到的最大件数,和对应的方案数.思路: 如果将物品的价格看做容量,将它的件数1看做价值的话,那么用01背包就可以求的花费m钱所能买到的最大件数dp[m]. 但是题目还要求方案数,因此很容易想到再建立一个数组f[j],存储j元钱能买dp[j]个物品的方案数. 在求解01背包的过程中,要分两种情况讨论: 设当前所选的物品为i 1.   若选了物品i后,能买的件数比不选物品i的件数大,即dp[j…
DP还有很长很长一段路要走.. 题意:给出n纪念品的价格和钱数m,问最多能买多少件纪念品和买这些数量的纪念品的方案数. 首先,求能买最多的纪念品的数量,用贪心法可以解决.将价钱排序,然后从最便宜的开始买,这样就很容易求得最多买的纪念品的数量. 方案数就要用到动态规划. dp[j][k]表示花费不超过j元买k件物品的方案数 dp[j][k] += dp[j-a[i]][k-1] 因为这里本来是个三维数组的,多一个维度用来表示前i件物品.调整了循环顺序,类似01背包空间上的优化,所以倒着循环就可以利…
数组01背包. http://acm.hdu.edu.cn/showproblem.php?pid=2126 http://blog.csdn.net/crazy_ac/article/details/7869411 f[i][j][k]表示前i种物品,买了j个,花了小于等于k的钱的时候的方案数 因为是小于等于k,所以初始化的时候要注意哦. 那么转移的时候第i种物品取或者不取 f[i][j][k]+=f[i-1][j][k];   f[i][j][k]+=f[i-1][j-1][k-v[i]];…