题目一: A − B A-B A−B数对 ( P 1102 ) (P1102) (P1102)
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
constexpr int N = 200010;
int s[N];
int main()
{
int n, c;
cin >> n >> c;
for (int i = 0; i < n; i++)
{
cin >> s[i];
}
sort(s, s + n);
int l = 0, r = 0;
ll sum = 0;
for (int i = 0; i < n; i++)
{
while (s[l] < s[i] - c && l < n)
l++;
while (s[r] <= s[i] - c && r < n)
r++;
if (s[i] - s[l] == c)
{
sum += r - l;
}
}
cout << sum << endl;
return 0;
}
题目二:逛画展 ( 洛谷 P 1638 ) (洛谷 P1638) (洛谷P1638)
/*
coder:sunshine
school:njupt
*/
#include <bits/stdc++.h>
using namespace std;
#define endl '\n' //交互题删掉
#define x first
#define y second
typedef long long ll;
typedef pair<int, int> PII;
const int mod = 1e9 + 7;
const int N = 1e6 + 10;
int n, m, l, r;
const int M = 2e3 + 10;
int a[N], sum[M];
int ans, ansl, ansr, num;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
l = 1, r = 1;
num = 0;
ans = 1e6 + 10;
while (l <= r && r <= n + 1)
{
if (num < m)
{
r++;
sum[a[r - 1]]++;
if (sum[a[r - 1]] == 1)
num++;
}
else
{
if (ans > r - l)
{
ans = r - l;
ansl = l;
ansr = r - 1;
}
sum[a[l]]--;
if (sum[a[l]] == 0)
num--;
l++;
}
}
cout << ansl << " " << ansr << endl;
return 0;
}
题目三:最大子段和 ( 洛谷 P 1115 ) (洛谷P1115) (洛谷P1115)
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
int main()
{
int n, a, f = 0, ans = -1e9;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a;
f = max(a, f + a);
ans = max(f, ans);
}
cout << ans << endl;
}