作业介绍

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
int n, m;
int a[N];

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	while (m--) {
		int x;
		cin >> x;
		int l = 1, r = n, res = -1;
		while (l <= r) {
			int mid = (l + r) / 2;
			if (a[mid] > x) {
				r = mid - 1;
			} else if (a[mid] < x) {
				l = mid + 1;
			} else if (a[mid] == x) {
				res = mid;
				r = mid - 1;
			}
		}
		cout << res << " ";
	}
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n, a[N], C;

int main() {
	cin >> n >> C;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	sort(a + 1, a + n + 1);
	long long res = 0;
	for (int i = 1; i <= n; i++) {
		int B = a[i] - C;
		//第一个大于B的位置
		int pos1 = -1;
		int l = 1, r = n;
		while (l <= r) {
			int mid = (l + r) / 2;
			if (a[mid] > B) {
				pos1 = mid;
				r = mid - 1;
			} else
				l = mid + 1;
		}
		int pos2 = -1;
		l = 1, r = n;
		while (l <= r) {
			int mid = (l + r) / 2;
			if (a[mid] >= B) {
				pos2 = mid;
				r = mid - 1;
			} else
				l = mid + 1;
		}
		res += pos1 - pos2;
	}
	cout << res << endl;
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n, c, a[N];

int main() {
	cin >> n >> c;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	sort(a + 1, a + n + 1);
	long long res = 0;
	for (int i = 1; i <= n; i++) {
		int B = a[i] - c;
		//大于B的位置
		int pos2 = upper_bound(a + 1, a + n + 1, B) - a;
		int pos1 = lower_bound(a + 1, a + n + 1, B) - a;
		res += pos2 - pos1;
	}
	cout << res << endl;
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, k;
int a[N];

int check(int x) {
	//判断能否切成大于等于k段的x
	int res = 0;
	for (int i = 1; i <= n; i++) {
		res += a[i] / x;
	}
	if (res >= k)
		return 1;
	else
		return 0;
}

int main() {
	cin >> n >> k;
	int minn = 1e9;
	long long sum = 0;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		sum+=a[i];
	}
	if(sum<k){
		cout<<0<<endl;
		return 0;
	}
	int res = -1, l = 1, r = 1e9;
	while (l <= r) {
		int mid = (l + r) / 2;
		if (check(mid) == 1) {
			res = mid;
			l = mid + 1;
		} else
			r = mid - 1;
	}
	cout << res << endl;
	return 0;
}

题目

认领作业后才可以查看作业内容。
状态
正在进行…
题目
15
开始时间
2026-9-12 0:00
截止时间
2026-9-20 23:59
可延期
24 小时