This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int maxn = 45;
typedef long long ll;
typedef pair<int, int> pii;
int n;
pii num[maxn], b[maxn];
vector<ll> v[maxn];
void compress(void)
{
	map<int, int> M;
	vector<int> cc;
	for (int i = 0; i < n; i++)
		cc.push_back(num[i].first);
	sort(cc.begin(), cc.end());
	int ind = 0;
	for (auto x: cc)
		if (M.find(x) == M.end())
			M[x] = ++ind;
	for (int i = 0; i < n; i++)
		num[i].first = M[num[i].first];
}
int main(void)
{
	ios::sync_with_stdio(false); cin.tie(0);
	ll k;
	cin >> n >> k;
	for (int i = 0; i < n; i++)
		cin >> num[i].first >> num[i].second;
	compress();
	int m = n/2;
	for (int i = m; i < n; i++)
		b[i-m] = num[i];
	ll ans = 0LL;
	for (int mask = 1; mask < (1<<m); mask++)
	{
		int atual = 0;
		ll soma = 0LL;
		bool ok = 1;
		for (int i = 0; i < m; i++)
		{
			if (!(mask&(1<<i))) continue;
			if (num[i].first < atual)
			{
				ok = 0;
				break;
			}
			soma += (ll) num[i].second;
			atual = num[i].first;
		}
		if (ok)
		{
			if (soma >= k) ans++;
			v[atual].push_back(soma);
		}
	}
	for (int i = 1; i <= n; i++)
		sort(v[i].begin(), v[i].end());
	int mm = n-m;
	for (int mask = 1; mask < (1<<mm); mask++)
	{
		int atual = 0, first = -1;
		ll soma = 0LL;
		bool ok = 1;
		for (int i = 0; i < mm; i++)
		{
			if (!(mask&(1<<i))) continue;
			if (b[i].first < atual)
			{
				ok = 0;
				break;
			}
			if (first == -1) first = b[i].first;
			soma += (ll) b[i].second;
			atual = b[i].first;
		}
		if (ok)
		{
			if (soma >= k) ans++;
			for (int i = 1; i <= first; i++)
			{
				vector<ll>::iterator it = lower_bound(v[i].begin(), v[i].end(), k-soma);
				ans += (ll)((int)(v[i].end()-it));
			}
		}
	}
	cout << ans << "\n";
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |