D 夹缝中求和

完全数

https://ac.nowcoder.com/acm/contest/8997/A

其实对于数组的顺序打乱并不会影响,因为都是要求对所有i,j分别匹配求出能满足条件的解的个数,所以排序加二分即可。

include

include

include

include

include<memory.h>

include

include

define pii pair<int,int>

define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)

using namespace std;
typedef long long ll;
const int Max = 2e5 + 5;
int lst[Max];
int Mod = 1e9 + 7;

int main()
{
FAST;
int n, x, y;cin >> n >> x >> y;
for (int i = 1;i <= n;i++)
{
cin >> lst[i];
}
ll sum = 0;
sort(lst + 1, lst + n + 1);
for (int i = 1;i < n;i++)
{
int l = i+1, r = n;
while (l <= r)
{
int mid = (l + r) / 2;
if (lst[mid] + lst[i] < x)l = mid + 1;
else r = mid - 1;
}
int le = l;
r = n;
while (l <= r)
{
int mid = (l + r) / 2;
if (lst[mid] + lst[i] <= y)l = mid + 1;
else r = mid - 1;
}
if (l != n + 1)
{
l--;
sum += (l - le + 1);
}
}
cout << sum;
}

全部评论
厉害啊, 在确定边界的时候用二分比较快, 因为是有序的, 如果是一个一个看会比较慢.
点赞 回复 分享
发布于 2020-11-30 09:51

相关推荐

ResourceUtilization:我嘞个董事长
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务