#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,q,l,r;
while(cin>>n>>q)
{
vector<int> a(n);
for(int i=0;i<n;i++) cin>>a[i];
while(q--)
{
cin>>l>>r;
vector<int> b(r-l+1);
for(int i=0;i<r-l+1;i++) b[i]=a[i+l-1];
sort(b.begin(),b.end());
int len=r-l+1;
int x=b[len-1];
int y=b[len-2];
int z=b[len-3];
cout<<x+y+z<<endl;
}
}
return 0;
} //好接近了,但是因为超时被卡住了!

  接下来是题目喽:

援引自https://blog.csdn.net/xizi_ghq                  https://blog.csdn.net/xizi_ghq/article/details/97136436

题意:给出一个数列,询问任意区间,区间内所组成的最大的三角形周长是多少?

首先要明白斐波那契的一个性质,刚刚好不能够组成三角形,然后根据这个性质,1e9的范围内,如果一直不能构成三角形,最大只有47个数(47层)。这样我们从每个区间取出最大的47个数,然后来判断这47个数满足题意的三角形周长就可以了。

很明显主席树查询第k大模板。

大佬的代码:

 #include<bits/stdc++.h>
using namespace std;
const int M=1e5+;
int n,q,d[M],b[M],root[M],cnt;
struct Node{int l,r,sum;}t[*M];
void build(int &rot,int l,int r){
rot=++cnt;
t[rot].sum=;
if(l==r)return ;
int mid=(l+r)>>;
build(t[rot].l,l,mid);
build(t[rot].r,mid+,r);
}
void update(int &rot,int l,int r,int last ,int v){
rot=++cnt;
t[rot].l=t[last].l;
t[rot].r=t[last].r;
t[rot].sum=t[last].sum+;
if(l==r)return ;
int mid=(l+r)>>;
if(v<=mid)update(t[rot].l,l,mid,t[last].l,v);
if(mid<v)update(t[rot].r,mid+,r,t[last].r,v);
}
bool judge(int x,int y,int z){
char xx[];
xx[]=x;
xx[]=y;
xx[]=z;
sort(xx,xx+);
if(xx[]+xx[]<=xx[])return false;
return true;
}
int ask(int pre,int now,int l,int r,int k){
if(l==r)return l;
int mid=(l+r)>>,num=t[t[now].r].sum-t[t[pre].r].sum;
if(k<=num)return ask(t[pre].r,t[now].r,mid+,r,k);
return ask(t[pre].l,t[now].l,l,mid,k-num);
}
int main(){
while(scanf("%d%d",&n,&q)!=EOF){
cnt=; for(int i=;i<=n;i++){
scanf("%d",d+i);
b[i]=d[i];
}
sort(b+,b+n+);
int sz=unique(b+,b+n+)-(b+);
for(int i=;i<=n;i++)d[i]=lower_bound(b+,b+sz+,d[i])-b;
build(root[],,sz);
for(int i=;i<=n;i++)update(root[i],,sz,root[i-],d[i]); //通过上个树,来更新这个树
long long res[];
for(int x,y,k,mx,f,i=;i<=q;i++){
scanf("%d%d",&x,&y);
mx=min(,y-x+);
if(mx<){
printf("-1\n");
continue;
}
for(int j=;j<=mx;j++) res[j] = b[ask(root[x-],root[y],,sz,j)]; //找到第k大的数字
f=;
for(int j=;j<=mx;j++){
if(res[j]+res[j-]>res[j-]){
f=;
printf("%lld\n",res[j]+res[j-]+res[j-]);
break;
}
}
if(!f)printf("-1\n");
}
}
return ;
}

tql !!!!!!

ACM的探索之Keen On Evrything But Triangle(我觉得可以很接近啦!!)的更多相关文章

  1. 2019杭电多校第二场hdu6601 Keen On Everything But Triangle

    Keen On Everything But Triangle 题目传送门 解题思路 利用主席树求区间第k小,先求区间内最大的值,再求第二大,第三大--直到找到连续的三个数可以构成一个三角形.因为对于 ...

  2. HDU - 6601 Keen On Everything But Triangle 主席树

    Keen On Everything But Triangle 感觉最近多校好多主席树的亚子,但是本人菜得很,还没学过主席树,看着队友写题就只能划水,\(WA\)了还不能帮忙\(debug\),所以深 ...

  3. ACM的探索之Everything is Generated In Equal Probability! 后序补充丫!

    Problem Desciption: 百度翻译后的汉化: 参见博客:https://www.cnblogs.com/zxcoder/p/11253099.html https://blog.csdn ...

  4. ACM的探索之Just Skip The Problem

    -----------------心怀虔诚,奋勇前进,fighting!!!!!! Problem Description: inclusively:          包括一切地;包含地 simul ...

  5. ACM的探索之Everything Is Generated In Equal Probability(这真的是很有趣的话语丫!)

    ---------------------------------------步履不停,奋勇前进! ------------------------难度真的是蛮大丫!后序补充!

  6. 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 ...

  7. 2019 Multi-University Training Contest 2 - 1011 - Keen On Everything But Triangle - 线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=6601 首先要贪心地想,题目要最长的边长,那么要怎么构造呢?在一段连续的区间里面,一定是拿出最长的三根出来比,这样 ...

  8. [2019杭电多校第二场][hdu6601]Keen On Everything But Triangle

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6601 题意是说用给定区间内的数字组成周长最大的三角形. 大致做法就是求区间第1大,第2大和第3大然后判 ...

  9. 2017 ACM/ICPC 沈阳 F题 Heron and his triangle

    A triangle is a Heron’s triangle if it satisfies that the side lengths of it are consecutive integer ...

随机推荐

  1. nvm —— Node版本管理工具

    nvm下载 下载地址 下载nvm-setup.zip文件 nvm安装 1.以管理员身份运行install.cmd文件,设置文件路径 root: C:\Users\Administrator\AppDa ...

  2. C++——字符串处理

    11.用字符数组存储和处理字符串 字符数组的声明和引用  字符串: 字符串常量 “china”,没有字符串变量,用字符数组来存放字符串,字符串以‘\0’结束. 字符串数组的初始化: 逐个输出输入字符串 ...

  3. MySQL主键设计盘点

    目录 主键定义 主键设计和应用原则 主键生成策略 自增ID UUID 自建的id生成器 Twitter的snowflake算法 @ 最近在项目中用了UUID的方式生成主键,一开始只是想把这种UUID的 ...

  4. JS Data 时间对象

    new Date() 返回当前的本地日期和时间

  5. sort函数的用法(C++排序库函数的调用)

    对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了. (一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c+ ...

  6. Python之路Day02

    一.While while -- 循环 while 条件: 循环体 break -- 终止当前循环 while True:    print("爱情买卖")    break   ...

  7. laydate 限制结束日期不能大于起始日期

    时间选择器在选择的时候,同时配置了另一个时间选择器内的参数 <div class="form-group"> <label for="exampleIn ...

  8. 接口出现无法执行curl 开启cgi

    问题描述: 路由能正常访问,但认证失败, 由于请求需要执行,curl -X GET "http://api.jr.com/v1/salary/list" -H "acce ...

  9. 2.2 logistic回归损失函数(非常重要,深入理解)

    上一节当中,为了能够训练logistic回归模型的参数w和b,需要定义一个成本函数 使用logistic回归训练的成本函数 为了让模型通过学习来调整参数,要给出一个含有m和训练样本的训练集 很自然的, ...

  10. AC3 Rematrix

    当L R channel highly correlated时,AC3 encoder 使用rematrix技术压缩L/R的和和差. 原始信号为left,right,使用rematrix压缩信号为le ...