提出 #69839656


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i, j, k) for(int i = (j); i <= (k); i++)
#define per(i, j, k) for(int i = (j); i >= (k); i--)
#define pb emplace_back
#define fi first
#define se second
using vi = vector<int>;
using pi = pair<int, int>;

template<typename T0, typename T1> bool chmin(T0 &x, const T1 &y){
	if(y < x){x = y; return true;} return false;
}
template<typename T0, typename T1> bool chmax(T0 &x, const T1 &y){
	if(x < y){x = y; return true;} return false;
}

template<typename T> void debug(char *s, T x){
	cerr << s <<" = "<< x <<endl;
}
template<typename T, typename ...Ar> void debug(char *s, T x, Ar... y){
	int dep = 0;
	while(!(*s == ',' && dep == 0)){
		if(*s == '(') dep++;
		if(*s == ')') dep--;
		cerr << *s++;
	}
	cerr <<" = "<< x <<",";
	debug(s + 1, y...);
}
#define gdb(...) debug((char*)#__VA_ARGS__, __VA_ARGS__)

const int V = 500;

signed main(){
	#ifdef LOCAL
	assert( freopen(".in", "r", stdin) );
	assert( freopen(".out", "w", stdout) );
	#endif
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int n;
	cin >> n;
	vi w(n), v(n);
	rep(i, 0, n - 1){
		cin >> v[i] >> w[i];
	}
	int q;
	cin >> q;
	vector< array<int, 4> > Q(q);
	vi ans(q);
	int tmp = 0;
	for(auto &[l, r, c, id]:Q){
		cin >> l >> r >> c;
		l --, r --;
		id = tmp ++;
	}
	vector<vi> f(n, vi(V + 1)), g(n, vi(V + 1));
	auto dfs = [&](auto &self, int l, int r, vector< array<int, 4> > Q)->void {
		if(l + 1 == r){
			for(auto [l, r, c, id]:Q){
				ans[id] = (v[l] <= c? w[l]: 0);
			}
			return;
		}
		int mid = (l + r) / 2;
		fill(f[mid].begin(), f[mid].end(), 0);
		per(i, mid - 1, l){
			f[i] = f[i + 1];
			rep(j, 0, V - v[i]){
				chmax(f[i][j + v[i]], f[i + 1][j] + w[i]);
			}
		}
		fill(g[mid - 1].begin(), g[mid - 1].end(), 0);
		rep(i, mid, r - 1){
			g[i] = g[i - 1];
			rep(j, 0, V - v[i]){
				chmax(g[i][j + v[i]], g[i - 1][j] + w[i]);
			}
		}
		
		vector< array<int, 4> > L, R;
		for(auto [l, r, c, id]:Q){
			if(l < mid && r >= mid){
				rep(i, 0, c){
					chmax(ans[id], f[l][i] + g[r][c - i]);
				}
			} else if(r < mid){
				L.push_back({l, r, c, id});
			} else if(l >= mid){
				R.push_back({l, r, c, id});
			}
		}
		self(self, l, mid, L);
		self(self, mid, r, R);
	};
	dfs(dfs, 0, n, Q);
	rep(i, 0, q - 1){
		cout << ans[i] <<'\n';
	}
}

提出情報

提出日時
問題 G - Range Knapsack Query
ユーザ bananabot
言語 C++ 20 (gcc 12.2)
得点 575
コード長 2396 Byte
結果 AC
実行時間 465 ms
メモリ 195736 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 575 / 575
結果
AC × 2
AC × 51
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_small_00.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 01_small_04.txt, 01_small_05.txt, 01_small_06.txt, 01_small_07.txt, 02_large_00.txt, 02_large_01.txt, 02_large_02.txt, 02_large_03.txt, 02_large_04.txt, 02_large_05.txt, 02_large_06.txt, 02_large_07.txt, 02_large_08.txt, 02_large_09.txt, 02_large_10.txt, 02_large_11.txt, 02_large_12.txt, 02_large_13.txt, 02_large_14.txt, 02_large_15.txt, 02_large_16.txt, 02_large_17.txt, 02_large_18.txt, 02_large_19.txt, 02_large_20.txt, 02_large_21.txt, 02_large_22.txt, 02_large_23.txt, 02_large_24.txt, 02_large_25.txt, 02_large_26.txt, 02_large_27.txt, 02_large_28.txt, 02_large_29.txt, 02_large_30.txt, 02_large_31.txt, 02_large_32.txt, 02_large_33.txt, 02_large_34.txt, 02_large_35.txt, 03_handmade_00.txt, 03_handmade_01.txt, 03_handmade_02.txt, 03_handmade_03.txt, 03_handmade_04.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3640 KiB
00_sample_01.txt AC 1 ms 3448 KiB
01_small_00.txt AC 56 ms 19064 KiB
01_small_01.txt AC 102 ms 22716 KiB
01_small_02.txt AC 97 ms 28428 KiB
01_small_03.txt AC 2 ms 3864 KiB
01_small_04.txt AC 88 ms 23228 KiB
01_small_05.txt AC 14 ms 6224 KiB
01_small_06.txt AC 82 ms 23216 KiB
01_small_07.txt AC 117 ms 22864 KiB
02_large_00.txt AC 353 ms 181804 KiB
02_large_01.txt AC 430 ms 181928 KiB
02_large_02.txt AC 360 ms 179364 KiB
02_large_03.txt AC 422 ms 179196 KiB
02_large_04.txt AC 258 ms 175128 KiB
02_large_05.txt AC 283 ms 175072 KiB
02_large_06.txt AC 359 ms 181760 KiB
02_large_07.txt AC 446 ms 181756 KiB
02_large_08.txt AC 373 ms 179428 KiB
02_large_09.txt AC 465 ms 179316 KiB
02_large_10.txt AC 281 ms 175176 KiB
02_large_11.txt AC 319 ms 175276 KiB
02_large_12.txt AC 362 ms 181908 KiB
02_large_13.txt AC 442 ms 181924 KiB
02_large_14.txt AC 365 ms 179328 KiB
02_large_15.txt AC 465 ms 179304 KiB
02_large_16.txt AC 295 ms 175040 KiB
02_large_17.txt AC 332 ms 175140 KiB
02_large_18.txt AC 368 ms 182032 KiB
02_large_19.txt AC 399 ms 182084 KiB
02_large_20.txt AC 360 ms 179544 KiB
02_large_21.txt AC 406 ms 179164 KiB
02_large_22.txt AC 284 ms 175272 KiB
02_large_23.txt AC 310 ms 175124 KiB
02_large_24.txt AC 373 ms 182156 KiB
02_large_25.txt AC 427 ms 181912 KiB
02_large_26.txt AC 380 ms 179216 KiB
02_large_27.txt AC 424 ms 179272 KiB
02_large_28.txt AC 288 ms 175112 KiB
02_large_29.txt AC 313 ms 175176 KiB
02_large_30.txt AC 377 ms 182408 KiB
02_large_31.txt AC 426 ms 182104 KiB
02_large_32.txt AC 370 ms 179292 KiB
02_large_33.txt AC 422 ms 179300 KiB
02_large_34.txt AC 287 ms 175116 KiB
02_large_35.txt AC 308 ms 175144 KiB
03_handmade_00.txt AC 256 ms 195736 KiB
03_handmade_01.txt AC 33 ms 16992 KiB
03_handmade_02.txt AC 364 ms 181852 KiB
03_handmade_03.txt AC 230 ms 187848 KiB
03_handmade_04.txt AC 322 ms 187744 KiB