ACM的探索之Keen On Evrything But Triangle(我觉得可以很接近啦!!)
#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(我觉得可以很接近啦!!)的更多相关文章
- 2019杭电多校第二场hdu6601 Keen On Everything But Triangle
Keen On Everything But Triangle 题目传送门 解题思路 利用主席树求区间第k小,先求区间内最大的值,再求第二大,第三大--直到找到连续的三个数可以构成一个三角形.因为对于 ...
- HDU - 6601 Keen On Everything But Triangle 主席树
Keen On Everything But Triangle 感觉最近多校好多主席树的亚子,但是本人菜得很,还没学过主席树,看着队友写题就只能划水,\(WA\)了还不能帮忙\(debug\),所以深 ...
- ACM的探索之Everything is Generated In Equal Probability! 后序补充丫!
Problem Desciption: 百度翻译后的汉化: 参见博客:https://www.cnblogs.com/zxcoder/p/11253099.html https://blog.csdn ...
- ACM的探索之Just Skip The Problem
-----------------心怀虔诚,奋勇前进,fighting!!!!!! Problem Description: inclusively: 包括一切地;包含地 simul ...
- ACM的探索之Everything Is Generated In Equal Probability(这真的是很有趣的话语丫!)
---------------------------------------步履不停,奋勇前进! ------------------------难度真的是蛮大丫!后序补充!
- 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 Multi-University Training Contest 2 - 1011 - Keen On Everything But Triangle - 线段树
http://acm.hdu.edu.cn/showproblem.php?pid=6601 首先要贪心地想,题目要最长的边长,那么要怎么构造呢?在一段连续的区间里面,一定是拿出最长的三根出来比,这样 ...
- [2019杭电多校第二场][hdu6601]Keen On Everything But Triangle
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6601 题意是说用给定区间内的数字组成周长最大的三角形. 大致做法就是求区间第1大,第2大和第3大然后判 ...
- 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 ...
随机推荐
- Public Key Retrieval is not allowed
链接MySQL数据库报错: 数据库连接url中添加对应属性的支持.allowPublicKeyRetrieval=true&useSSL=false url: jdbc:mysql://loc ...
- 安装python3.7.4时报错:Service Pack 1 is required to continue installation
python3.7.4安装失败:Service Pack 1 is required to continue installation 解决办法: 点击报错页面中的“log file”,日志最后一行显 ...
- Java大全-吐血整理
gqzdev
- Eclipse项目工程导入到IDEA继续开发-超详细
现在Java开发的主流工具是IDEA,不是说Eclipse,各有各的特色.不过我现在深深的爱上了idea这个工具. 但是之前很多项目都是用eclipse开发的,现在就转入到idea中进行继续开发. 1 ...
- 使用VS2017创建EF框架实例
本文例子中使用环境:vs2017,sql server 2008 一,创建EF项目 1,解决方案添加.Net Framework类库项目,在新建的项目下新建项:data->ADO.NET实体数据 ...
- 题解【洛谷P1948】[USACO08JAN]电话线Telephone Lines
题面 题解 很显然,答案满足单调性. 因此,可以使用二分答案求解. 考虑\(check\)的实现. 贪心地想,免费的\(k\)对电话线一定都要用上. 每次\(check\)时将小于\(mid\)的边权 ...
- Linux 基本命令简单学习
平常工作中需要使用到的一些Linux基本命令,简单记录: 通过订单号查看日志: cat /---/---/xxxx20190908.log | grep C52918588112261 -C 5 ...
- 三、统一威胁管理(UTM)
简介 统一威胁管理(Unified Threat Management),简称UTM. 2004年9月,IDC首度提出“统一威胁管理”的概念,即将防病毒.入侵检测和防火墙安全设备划归统一威胁管理(Un ...
- C#画图超出屏幕的部分无法显示的解决方法
C#画图超出屏幕的部分无法显示,通过AutoScrollMinSize属性及相关方法解决问题. 可以实现 到 的转变. 代码如下: using System.Drawing; using System ...
- 圆桌问题 (ArrayList+模拟)
圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开始数数,数到第m个人,则立即处死该人:然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人 ...