選值 二分 組合數

2021-08-19 13:50:13 字數 671 閱讀 4128

題目描述

給定n個數,從中選出三個數,使得最大的那個減最小的那個的值小於等於d,問有多少種選法。

第一行兩個整數n,d(1 <= n <= 100,000,1 <= d <= 1000,000,000);

第二行n個整數滿足abs(ai) <= 1,000,000,000。資料保證a單調遞增。

輸出乙個整數表示滿足條件的選法。

4 3

1 2 3 4

輸出
4

示例2

4 2

-3 -2 -1 0

2

示例3

5 19

1 10 20 30 50

1

//二分+組合數

#include#includeusing namespace std;

const int maxn=1e5+5;

typedef long long ll;

int n,d;

int a[maxn];

int find(int x,int i)

}return val;

}int main()

ll sum=0,cnt=0;

for(int i=0;i

遞增和二分組合的查詢法

前面我們分別列出了遞增查詢法和二分查詢法,各有優缺點。遞增適用範圍廣,對陣列元素順序沒有要求,但效率較低 而二分法運算效率高,但對陣列元素的排列有要求需要從小到大排序好。因此我們可以將兩種演算法組合到乙個程式裡面,先去判斷給出的陣列元素是否已經排列好,若排列好就使用二分法查詢執行速度快,若沒有排序好...

AHOI2018初中組 二分查詢 分組

最開始是想二分答案的,但是沒有考慮到資料中重複的數值的情況,50 分 wa 了。但是這題顯然適合二分查詢 當我們的資料 在陣列中是線性排列的,就可以使用二分查詢。需要兩個輔助陣列 你甚至還會發現這題有點蜘蛛紙牌那味 霧 不多說閒話,下面是 二分查詢 設計乙個陣列 g 表示第 i 個分組中 需要加入的...

1056 組合數的和 (15 分)

這道題出的不嚴謹,萬一有重複的數字就會出錯,例如3 2 2 2 輸出結果為132其實只能組成22這一種二位數。1056 組合數的和 15 分 給定 n 個非 0 的個位數字,用其中任意 2 個數字都可以組合成 1 個 2 位的數字。要求所有可能組合出來的 2 位數字的和。例如給定 2 5 8,則可以...