二分查詢(D Pair of Topics)

2022-09-06 22:51:27 字數 1409 閱讀 8629

題意:給出兩組長度為n的陣列ai,bi。問滿足(i < j) ai + aj > bi + bj 有多少對?

解法:變形ai-bi + aj - bj > 0 ,記陣列ci = ai-bi .可知該題就是統計ci+cj > 0 有多少對。

對陣列ci排序,對於ci貢獻 等於 在ci後面找 大於 -ci 有多少個數。因為有序,直接upper_bound()找。

時間複雜度為(nlogn)。

//#include#include #include #include #include #include #include #include #include #include #include #include #include #include typedef long long ll ;

#define int ll

#define mod 1000000007

#define gcd __gcd

#define rep(i , j , n) for(int i = j ; i <= n ; i++)

#define red(i , n , j) for(int i = n ; i >= j ; i--)

#define me(x , y) memset(x , y , sizeof(x))

//ll lcm(ll a , ll b)

//ll quickpow(ll a , ll b)return ans;}

//int euler1(int x)if(x>1)ans-=ans/x;return ans;}

//const int n = 1e7+9; int vis[n],prime[n],phi[n];int euler2(int n)for(int j=1;j#define fi first

#define se second

#define lson l,mid,root<<1

#define rson mid+1,r,root<<1|1

#define pb push_back

#define mp make_pair

#define cin(x) scanf("%lld" , &x);

using namespace std;

const int n = 1e7+9;

const int maxn = 2e5+9;

const double esp = 1e-6;

int a[maxn] , b[maxn] , c[maxn];

void solve()

rep(i , 1 , n)

sort(c + 1 , c + 1 + n);

int ans = 0 ;

rep(i , 1 , n)

cout << ans << endl; }

signed main()

}

迭代二分查詢二分查詢

在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...

1128 二分 二分查詢

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...

二分查詢及變種二分查詢

二分查詢也稱折半查詢 binary search 它的查詢效率很好。二分查詢有乙個要求是必須採用順序儲存結構,而且表種的元素是有序的。只有滿足這個條件我們才能使用二分查詢。查詢條件 查詢區域的左邊界,小於等於查詢區域的右邊界 查詢過程 1.迴圈條件 查詢條件 2.計算序列中間下標位置 3.如果待查詢...