[hdu6601]Keen On Everything But Triangle
有两个结论:1.排序后,答案一定是连续的三个数;2.当序列长度超过44一定有三个相同的数(因为即使该序列是斐波那契数列,此时也超过了1e9),然后用主席树等数据结构(略卡常,建议主席树)来维护前45大即可

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 #define mid (l+r>>1)
5 #define inf 1000000000
6 int V,n,m,k,x,y,a[N],b[N],r[N],f[N*20],ls[N*20],rs[N*20];
7 void update(int k1,int &k2,int l,int r,int x){
8 k2=++V;
9 ls[k2]=ls[k1];
10 rs[k2]=rs[k1];
11 f[k2]=f[k1]+1;
12 if (l==r)return;
13 if (x<=mid)update(ls[k1],ls[k2],l,mid,x);
14 else update(rs[k1],rs[k2],mid+1,r,x);
15 }
16 int query(int k1,int k2,int l,int r,int p){
17 if (l==r)return l;
18 if (f[rs[k2]]-f[rs[k1]]>=p)return query(rs[k1],rs[k2],mid+1,r,p);
19 return query(ls[k1],ls[k2],l,mid,p-f[rs[k2]]+f[rs[k1]]);
20 }
21 int main(){
22 while (scanf("%d%d",&n,&m)!=EOF){
23 V=0;
24 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
25 for(int i=1;i<=n;i++)b[i]=a[i];
26 sort(b+1,b+n+1);
27 int k=unique(b+1,b+n+1)-b-1;
28 for(int i=1;i<=n;i++)a[i]=lower_bound(b+1,b+k+1,a[i])-b;
29 for(int i=1;i<=n;i++)update(r[i-1],r[i]=++V,1,k,a[i]);
30 for(int i=1;i<=m;i++){
31 scanf("%d%d",&x,&y);
32 int ma=min(y-x+1,45),flag=0;
33 for(int j=1;j<=ma;j++){
34 a[j]=query(r[x-1],r[y],1,k,j);
35 if ((j>2)&&(b[a[j-1]]+b[a[j]]>b[a[j-2]])){
36 printf("%lld\n",0LL+b[a[j]]+b[a[j-1]]+b[a[j-2]]);
37 flag=1;
38 break;
39 }
40 }
41 if (!flag)printf("-1\n");
42 }
43 }
44 }
[hdu6601]Keen On Everything But Triangle的更多相关文章
- 2019杭电多校第二场hdu6601 Keen On Everything But Triangle
Keen On Everything But Triangle 题目传送门 解题思路 利用主席树求区间第k小,先求区间内最大的值,再求第二大,第三大--直到找到连续的三个数可以构成一个三角形.因为对于 ...
- hdu-6601 Keen On Everything But Triangle
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=6601 Description N sticks are arranged in a row, and ...
- [2019杭电多校第二场][hdu6601]Keen On Everything But Triangle
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6601 题意是说用给定区间内的数字组成周长最大的三角形. 大致做法就是求区间第1大,第2大和第3大然后判 ...
- HDU - 6601 Keen On Everything But Triangle 主席树
Keen On Everything But Triangle 感觉最近多校好多主席树的亚子,但是本人菜得很,还没学过主席树,看着队友写题就只能划水,\(WA\)了还不能帮忙\(debug\),所以深 ...
- hdu多校第二场1011 (hdu6601) Keen On Everything But Triangle 主席树
题意: 给定一个数列,每次询问一个区间,问这个区间中的值可组成的周长最大的三角形的周长. 题解: 定理1:给定一些值,这些值中组成边长最大的三角形的三条边的大小排名一定是连续的. 证明:假如第k大,第 ...
- 2019hdu多校 Keen On Everything But Triangle
Problem Description N sticks are arranged in a row, and their lengths are a1,a2,...,aN. There are Q ...
- 2019 Multi-University Training Contest 2 - 1011 - Keen On Everything But Triangle - 线段树
http://acm.hdu.edu.cn/showproblem.php?pid=6601 首先要贪心地想,题目要最长的边长,那么要怎么构造呢?在一段连续的区间里面,一定是拿出最长的三根出来比,这样 ...
- 【HDOJ6601】Keen On Everything But Triangle(主席树)
题意:给定一个长为n的序列,有q次询问,每次询问[l,r]这段区间内挑三个数,能组成的三角形的最大周长,无解输出-1 n,q<=1e5,a[i]<=1e9 思路:题解写法和我的不太一样 先 ...
- ACM的探索之Keen On Evrything But Triangle(我觉得可以很接近啦!!)
#include<bits/stdc++.h> using namespace std; int main() { int n,q,l,r; while(cin>>n>& ...
随机推荐
- 从零入门 Serverless | 企业级 CI/CD 工具部署 Serverless 应用的落地实践
背景知识 通过以往几节课程的学习,相信大家对于 SAE 平台已经有了一定的了解.SAE 为客户免除了很多复杂的运维工作,开箱即用.按用量付费:与此同时 SAE 提供了丰富的 Open API,可以很容 ...
- 题解 CF762D Maximum path
题目传送门 Description 给出一个 \(3\times n\) 的带权矩阵,选出一个 \((1,1)\to (3,n)\) 的路径使得路径上点权之和最大. \(n\le 10^5\) Sol ...
- Python内置高阶函数map()
map()函数map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 例如,对于lis ...
- 从C过渡到C++需要了解的“新特性”
第一个C++程序 #include <iostream> using namespace std; //编译指令 int main() { cout << "Hell ...
- 240.搜索二维矩阵II
从左下角位置开始搜索 时间复杂度:O(行数+列数). 想法有点像二分法,大了往一个方向找,小了往另一个方向找.由于矩阵横向和纵向都是递增,如果从(0,0)位置开始找,往右和往下都是增大,因此不知道实际 ...
- 占位符,SQL注入?
这两天在上课时被同学拿了一段代码问我,这段代码有什么问题,我看了一会说:Connection和PreparedStatement都没关.他说不止这方面的问题,还有sql注入的问题,我就坚决的说使用了占 ...
- C++ Boost signal2信号/插槽
#include "stdafx.h" #include "boost/signals2.hpp" #include "boost/bind.hpp& ...
- C/C++中浮点数输出精度的问题
本文使用C++语言书写,对于C的小伙伴们,如果编译不通过的话--就说明C里面没有这个内容,可以跳过 通常来说,我们书写程序主要只用整形变量 (signed/unsigned) (long/long l ...
- Spark面试题整理(三)
1.为什么要进行序列化序列化? 可以减少数据的体积,减少存储空间,高效存储和传输数据,不好的是使用的时候要反序列化,非常消耗CPU. 2.Yarn中的container是由谁负责销毁的,在Hadoop ...
- hdu 1159 Common Subsequence(最长公共子序列,DP)
题意: 两个字符串,判断最长公共子序列的长度. 思路: 直接看代码,,注意边界处理 代码: char s1[505], s2[505]; int dp[505][505]; int main(){ w ...