Language: C++

#include <iostream>
#include <algorithm>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <vector>
#include <string>
#include <queue>
#include <deque>
#include <list>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <bitset>
#include <random>
#include <complex>
#include <assert.h>

using namespace std;
typedef long long ll;
#define endl '\n'

template<typename T>
inline bool chmin(T& x, T a) {
	if (x >= a) { x = a; return true; }
	return false;
}

template<typename T>
inline bool chmax(T& x, T a) {
	if (x <= a) { x = a; return true; }
	return false;
}

vector<int> V, W;

int main() {
	ios::sync_with_stdio(false);
	std::cin.tie(0);

	int N; cin >> N;
	V.resize(N, 0);
	W.resize(N, 0);
	for (int i = 0; i < N; i++) {
		cin >> V[i] >> W[i];
	}

	int D = 9;
	int M0 = (1 << (D - 1));
	int M1 = 1 << D;
	map<int, map<int, int>> base;

	for (int i = M0; i < M1; i++) {
		map<int, int> mp;

		vector<pair<int, int>> items;
		int n = i + 1;
		while (n > 0) {
			items.push_back({ V[n - 1], W[n - 1] });
			n /= 2;
		}
		map<int, int> mp;// 価値、-重さで昇順
		mp.insert({ 0, 0 });
		for (int d = 0; d < items.size(); d++) {
			map<int, int> temp;
			for (auto itr = mp.begin(); itr != mp.end(); itr++) {
				temp.insert(*itr);

				int v = itr->first + items[d].first;
				int w = itr->second - items[d].second;
				if (temp.find(v) != temp.end()) {
					chmax(temp[v], w);
				}
				else {
					temp.insert({ v, w });
				}
			}
			mp = temp;
		}

		base.insert({ i,mp });
	}
	
	int Q; cin >> Q;
	for (int i = 0; i < Q; i++) {
		int v, l; cin >> v >> l;
		v--;

		if (v < M0) {
			vector<pair<int, int>> items;
			int n = v + 1;
			while (n > 0) {
				items.push_back({ V[n - 1], W[n - 1] });
				n /= 2;
			}
			map<int, int> mp;// 価値、-重さで昇順
			mp.insert({ 0, 0 });
			for (int d = 0; d < items.size(); d++) {
				map<int, int> temp;
				for (auto itr = mp.begin(); itr != mp.end(); itr++) {
					temp.insert(*itr);

					int v = itr->first + items[d].first;
					int w = itr->second - items[d].second;
					if (temp.find(v) != temp.end()) {
						chmax(temp[v], w);
					}
					else {
						temp.insert({ v, w });
					}
				}
				mp = temp;
			}
			int ans = 0;
			for (auto itr = mp.begin(); itr != mp.end(); itr++) {
				if (itr->second + l >= 0) {
					chmax(ans, itr->first);
				}
			}
			cout << ans << endl;
			continue;
		}

		map<int, int> mp;

		vector<pair<int, int>> items;
		int n = i + 1;
		while (n >= M1) {
			items.push_back({ V[n - 1], W[n - 1] });
			n /= 2;
		}
		map<int, int> mp;// 価値、-重さで昇順
		mp.insert({ 0, 0 });
		for (int d = 0; d < items.size(); d++) {
			map<int, int> temp;
			for (auto itr = mp.begin(); itr != mp.end(); itr++) {
				temp.insert(*itr);

				int v = itr->first + items[d].first;
				int w = itr->second - items[d].second;
				if (temp.find(v) != temp.end()) {
					chmax(temp[v], w);
				}
				else {
					temp.insert({ v, w });
				}
			}
			mp = temp;
		}
		vector<pair<int,int>> v1;
		for (auto itr = mp.begin(); itr != mp.end(); itr++) {
			v1.push_back({ -itr->second, -itr->first });
		}
		vector<pair<int, int>> temp1;
		int m = -1;
		for (int i = 0; i < v1.size(); i++) {
			if (v1[i].second > m) {
				temp1.push_back(v1[i]);
				m = v1[i].second;
			}
		}
		vector<pair<int, int>> v2;
		for (auto itr = base[n].begin(); itr != base[n].end(); itr++) {
			v2.push_back({ -itr->second, -itr->first });
		}
		vector<pair<int, int>> temp2;
		m = -1;
		for (int i = 0; i < v2.size(); i++) {
			if (v2[i].second > m) {
				temp2.push_back(v1[i]);
				m = v2[i].second;
			}
		}

		int c = 0, d = v2.size() - 1;
		int ans = 0;
		while (c < v1.size() && d >= 0) {
			if (v1[c].first + v2[d].first < l) {
				chmax(ans, v1[c].second + v2[d].second);
				c++;
			}
			else if (v1[c].first + v2[d].first > l) {
				d--;
			}
			else {
				chmax(ans, v1[c].second + v2[d].second);
				c++;
				d--;
			}
		}
		cout << ans << endl;
	}

	return 0;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:65:31: error: redeclaration of 'std::map<int, int> mp'
   65 |                 map<int, int> mp;// 価値、-重さで昇順
      |                               ^~
a.cc:57:31: note: 'std::map<int, int> mp' previously declared here
   57 |                 map<int, int> mp;
      |                               ^~
a.cc:135:31: error: redeclaration of 'std::map<int, int> mp'
  135 |                 map<int, int> mp;// 価値、-重さで昇順
      |                               ^~
a.cc:127:31: note: 'std::map<int, int> mp' previously declared here
  127 |                 map<int, int> mp;
      |                               ^~