Keen On Everything But Triangle 感觉最近多校好多主席树的亚子,但是本人菜得很,还没学过主席树,看着队友写题就只能划水,\(WA\)了还不能帮忙\(debug\),所以深思熟虑之后决定学习一下主席树. 题意 问在\([l,r]\)区间内取三个数字构成三角形,问能构成的三角形最大的周长是多少?如果不能构成三角形输出\("-1"\). 思路 三角形构成的条件: 三条边 两边之和大于第三边 然后呢,我们要找最大的周长,那么我们很容易想到取最大的三条边,如果不行就…
题意: 有\(n\)根长度不一的棍子,q次询问,求\([L,R]\)区间的棍子所能组成的周长最长的三角形.棍长\(\in [1, 1e9]\),n\(\in [1, 1e5]\). 思路: 由于不构成三角形的数组为菲波那切数列,所以当棍数超过44时,长度超过1e9,所以从最大开始数最多不超过45次就能找到构成三角形.所以直接主席树查询区间第k大.复杂度\(O(45 * q * logn)\). 代码: #include<map> #include<set> #include<…
题意: 给定一个数列,每次询问一个区间,问这个区间中的值可组成的周长最大的三角形的周长. 题解: 定理1:给定一些值,这些值中组成边长最大的三角形的三条边的大小排名一定是连续的. 证明:假如第k大,第k+1大,第k+2+b(b>0)大的三条边组成了一个边长最大的三角形,那么较小的两条边加起来长度大于第三边,又因为第k+2大的边比第k+2+b大的边长,因此把第k+2+b大的边换成第k+2大的边组成的三角形边长一定比原来大,矛盾. 定理2:如果三角形边长被限制为1e9以内的正整数,那么如果某组值存在…
题意: 给出一棵树,每条边有一个容量. 有若干次询问:\(S \, T \, K \, A \, B\),求路径\(S \to T\)的最大流量. 有两种方法可以增大流量: 花费\(A\)可以新修一条管道,管道可以连接任意两个点,两个点之间可以有任意条管道连接,新修的管道容量为\(1\) 花费\(B\)可以使某条管道(包括新修的管道)的容量增加\(1\) 求在不超过预算\(K\)的情况下的最大流量. 分析: 注意到流量最大只有\(10^4\),所以我们可以直接在值域上建一棵主席树. 主席树区间维…
传送门 •题意 有 $m$ 次询问,每次询问求 $n$ 个数中, $[L,R]$ 区间距 $p$ 第 $k$ 近的数与 $p$ 差值的绝对值: •题解 二分答案,假设当前二分的答案为 $x$,那么如何判断 $x$ 是否可以呢? 只需判断 $[L,R]$ 区间值在 $[p-x,p+x]$ 的数的个数 $sum$ 是否大于等于 k 即可: 如果 $sum \geq k$,那么,x 大了,需要减小范围,反之,需要增大范围: 如何快速求解 $[L,R]$ 区间值在 $[p-x,p+x]$ 的数的个数呢?…
http://acm.hdu.edu.cn/showproblem.php?pid=6601 首先要贪心地想,题目要最长的边长,那么要怎么构造呢?在一段连续的区间里面,一定是拿出最长的三根出来比,这样一定是最大的(废话).而且假如组成三角形失败的话最长的那根这次就没有用了. 考虑临界情况,也就是刚刚好不能组成三角形的时候,要在1e9内尽可能地安排多的棒子,那就不妨设为:1,1,2,3,5,8--也就是斐波那契数列.可以打出来发现在43项左右的时候已经接近1e9了. 也就是每个区间真正有用的只是最…
The Famous ICPC Team Again Problem Description   When Mr. B, Mr. G and Mr. M were preparing for the 2012 ACM-ICPC World Final Contest, Mr. B had collected a large set of contest problems for their daily training. When they decided to take training, M…
BUPT2017 wintertraining(15) #8G 题意 给一个数组a,有n个数,m次操作.\(N, M ≤ 10^5, |A i| ≤ 10^9, 1 ≤ l ≤ r ≤ N, |d| ≤ 10^4\) 操作有四种, C l r d:更新区间[l,r],值都加上d,并且时间前进1 Q l r:查询[l,r]的区间和 H l r t:查询t时刻的区间和 B t:回到t时刻(一定是历史时刻),且t时刻之后的操作都作废了. 题解 这道题的关键是怎么更新区间和. 本来线段树更新区间和要pu…
题意:给定一个长为n的序列,有q次询问,每次询问[l,r]这段区间内挑三个数,能组成的三角形的最大周长,无解输出-1 n,q<=1e5,a[i]<=1e9 思路:题解写法和我的不太一样 先说题解做法,显然最坏情况下是斐波那契数列的形式,大概是log2(1e9)项就没有-1了,所以维护一个可以取某一段中前50大的数字的数据结构,取出来之后sort看相邻3个取max即可 我的做法是用主席树把区间权值抠出来,树上二分权值,如果当前结点的右儿子的size>=3就必定是最优解,否则把右儿子中的所有…
Keen On Everything But Triangle 题目传送门 解题思路 利用主席树求区间第k小,先求区间内最大的值,再求第二大,第三大--直到找到连续的三个数可以构成一个三角形.因为对于一组数,如果不能构成三角形,就小的就是斐波那契数列,因为数的范围在10^9内,所以不会超过50个数,也就是说,我们之间这样暴力地查询,查询次数不会超过50,肯定能找到结果. 代码如下 #include <bits/stdc++.h> #define INF 0x3f3f3f3f using nam…