題面
輸入資料只有一組。
第一行只有乙個數字n,代表一共有n根木棍,n<=100000。
第二行為n個數,代表每根木棍的長度。每根木棍的大小不超過1e18。
第三行為乙個數字q,代表詢問數目,q<=100000。
接下來的q行,每一行有兩個數字l和r,代表詢問的區間。其中l和r滿足1<=l<=r<=n。
輸出對於每個詢問,如果可以組成三角形輸出」yes」,否則輸出」no」(不需要加引號)。
輸如樣例
523
34102
1335
輸出樣例yes
no
分析題目
首先可以知道斐波那契數列數列第i項等於第i-1和第i-2項之和,可以想到的是當項數大於100時,第100項已經超過1e10了。當搜尋的區間長度大於100時,肯定存在這樣的三條邊構成三角形。為什麼?因為斐波那契數列已經是差一點就可以構成三角形了。int 的範圍是有限的,在這有限的區間裡面最壞情況是斐波那契數列,數量超過這個,一定存在滿足構成三角形的三個數。
當個數小於50的時候:
暴力列舉:
當然不是三重迴圈: 可以列舉最大值。看看是否存在乙個三角形包含這條邊,最壞的情況是他前面兩條邊(排好序了)都不能包含,那麼這條一定不被其他邊包含(簡單證明),如果不滿足,移除這一條邊。那麼我們從大到小列舉邊的長度即可。
ac**
#include
#include
#include
#define maxn 1000005
using
namespace std;
int a[maxn]
, b[maxn]
;int n, m;
intjudge
(int l,
int r)
intmain()
return0;
}
斐波那契演算法
其思想與折半查詢 插值查詢沒有多大區別,本質上只是分割點的選擇不同。斐波那契查詢需要構造斐波那契數列,該數列的作用就是提供分割點 好多演算法書都沒有介紹清楚啊!參閱折半查詢 插值查詢以及斐波那契查詢 1 演算法首先找到構造乙個查詢表,即在原來的陣列上新增元素,使得該查詢表 陣列 的長度為某個斐波那契...
斐波那契數列衍生演算法題
假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。首先我們最快想到的實現方式就是遞迴 f 1 1 f 2 2 f n f n 1 f n 2 複製 func climbstairs n int int i...
演算法題 001 斐波那契數列
斐波那契數列的python版本 coding utf 8 斐波那契數列實現 import functools from typing import generator 方法一 使用遞迴 需要快取 functools.lru cache maxsize none def feibo num int i...