斐波那契数列的应用
思路:逆向思维,判断不能组成三角形所需要满足的条件,即发现为构造一个斐波那契额数列。
注意到题目给的数据范围<10^8;对应数列的第40项往前,故可以直接判断输出YES;再每次分别对梳理进行排序,判断满足三角形的条件即可。
#include <bits/stdc++.h>
using namespace std;
int a[100005];
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
int n,m;
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
while (m--)
{
int l,r;
scanf("%d%d",&l,&r);
if (r-l+1>=40) {printf("yes\n"); continue;}//数据范围推算出10^8
vector<int> tmp;//学习,动态数组
for (int i=l;i<=r;i++)
tmp.push_back(a[i]);
sort(tmp.begin(),tmp.end());
bool flag=false;
for (int i=0;i<(int)tmp.size()-2;i++)
if (tmp[i]+tmp[i+1]>tmp[i+2])
{
flag=true; break;
}
if (flag) printf("yes\n"); else printf("no\n");
}
}
return 0;
}