您的位置:首页 > 其它

Codeforeces Gym - 101733D Triangle Construction [想法]

2018-03-30 13:49 441 查看
题意:给你n个数,m个询问,每次询问[L,R]范围内是否能够成三角形。

题解:我们可以得知,三角形不能成立的情况是斐波那契数列,由于a[i]最多是10^18次,所以最多包含91个数,所以对于区间长度是大于92的话,是必定有解,所以对于每个询问,最多取92个数,然后再sort这些数一次判就可以了。

AC代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
struct node
{
ll id,w;
node(){}
node(ll id,ll w)
{
this->id=id;
this->w=w;
}
}b[105];
bool operator<(node a,node b)
{
return a.w<b.w;
}
ll a[300005],tot;
int main()
{
ll n,m;
scanf("%lld%lld",&n,&m);
for(ll i=1;i<=n;i++)
scanf("%lld",&a[i]);
while(m--)
{
tot=0;
ll l,r;
scanf("%lld%lld",&l,&r);
r=min(r,l+92);
for(ll i=l;i<=r;i++)
b[tot++]=node(i,a[i]);
sort(b,b+tot);
ll flag=0;
for(ll i=0;i<tot-2;i++)
if(b[i].w+b[i+1].w>b[i+2].w)
{
flag=1;
printf("%lld %lld %lld\n",b[i].id,b[i+1].id,b[i+2].id);
break;
}
if(!flag)printf("-1\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: