采用双指针求法。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 100005;
int n;
ll m;
int f[N], s[N];
multiset <int> ms;
ll sum;
int ans = INT_MAX;
int main(void) {
cin.tie(0), cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
cin >> f[i] >> s[i];
}
int l = 1, r = 0;
while (l <= n) {
while (r < n && sum < m) {
++r;
sum += (ll)f[r];
ms.insert(s[r]);
}
if (sum < m) break;
int maxs = *ms.rbegin();
ans = min(ans, maxs);
ms.erase(s[l]), sum -= (ll)f[l++];
}
cout << ans;
return 0;
}