提出 #52418814


ソースコード 拡げる

#include<bits/stdc++.h>
using namespace std;

#define intll long long
#define endl '\n'
#define TEST_CASE false

template<typename T>
void PRINT(vector<T>& arr) {
	for (int i = 0; i < int(arr.size()); i++)
		cout << arr[i] << " \n"[i == int(arr.size()) - 1];
}

// arr[i] <= x, last index of i
int last_find(vector<int>& arr, int x) {
	auto it = upper_bound(arr.begin(), arr.end(), x);
	if (it == arr.begin()) return -1;
	--it;
	return it - arr.begin();
}

// arr[i] <= x, first index of i
int first_find(vector<int>& arr, int x) {
	auto it = lower_bound(arr.begin(), arr.end(), x);
	if (it == arr.end()) return -1;
	if (*it == x) return it - arr.begin();
	if (it == arr.begin()) return -1;
	--it;
	return (*it <= x ? it - arr.begin() : -1);
}

template<typename T = int>
struct BLOCK {
	int N, block_size;
	vector<vector<T>> block;
	vector<vector<int>> B;
	vector<int> A;
	BLOCK(int n) : BLOCK(vector<int>(n, 0)) {}
	BLOCK(vector<int>& arr) : A(arr) {
		N = int(arr.size());
		block_size = 550;
		block.resize(block_size, vector<T>(block_size, 0)); // init_value
		B.resize(block_size);
		for (int i = 0; i < block_size; i++)
			build_block(i);
	}

	// 0-index
	int block_id(int i) { return (i / block_size); }

	// build BLOCK b
	void build_block(int b) {
		int l = b * block_size;
		if (l >= N) return;
		for (int i = l; i < (l + block_size); i++)
			B[b].push_back(A[i]);
		if (B[b].empty()) return;
		ranges::sort(B[b]);
		block[b][0] = B[b][0];
		for (int i = 1; i < block_size; i++)
			block[b][i] = block[b][i - 1] + (T) B[b][i];
	}

	// 1 - indexA
	// void update(int pos, T x) {
	// 	int B = block_id(pos - 1);
	// 	block[B] -= A[pos - 1]; // change OP
	// 	A[pos - 1] = x;
	// 	block[B] += A[pos - 1]; // cahnge OP
	// }

	// 1-index
	// void update_block(int pos, T x) {
	// 	int B = block_id(pos - 1);
	// 	A[pos - 1] = x;
	// 	build_block(B);
	// }

	// 1 - index
	T query(int l, int r, int x) {
		assert(1 <= l and l <= r and r <= N);
		l--, r--;
		T ans = 0; // Init Value
		for (; (l <= r) && (l % block_size != 0);) {
			ans += (T) (A[l] <= x ? A[l] : 0ll); // Cahnge OP
			l++;
		}
		for (; (l <= r) && (l + block_size - 1 <= r);) {
			int B_ = block_id(l);
			// ans += block[B];   // Change OP
			auto lb = last_find(B[B_], x);
			ans += 1ll * (lb == -1 ? 0 : block[B_][lb]);
			l += block_size;
		}
		for (; l <= r; ) {
			ans += (T)(A[l] <= x ? A[l] : 0ll);  // Change OP
			l++;
		}
		return ans;
	}
};


void solution() {

	int n;
	cin >> n;

	vector arr(n, int(0));
	for (auto &i : arr)
		cin >> i;

	BLOCK<intll> BL(arr);

	intll BEG = 0;
	int q;
	cin >> q;
	while (q--) {
		intll A, B, Y;
		cin >> A >> B >> Y;

		int l = A ^ BEG;
		int r = B ^ BEG;
		int x = Y ^ BEG;

		// cout << l << " " << r << endl;

		BEG = BL.query(l, r, x);
		cout << BEG << endl;
	}
}

int32_t main() {

	ios::sync_with_stdio(false) ; cin.tie(0) ;

	int t_c = 1, tt_c = 1;
	if (TEST_CASE) cin >> t_c;

	while (t_c--) {
		// cout << "Case " << tt_c++ << ": ";
		solution();
		// if (t_c) cout << '\n';
	}

	return 0;
}

提出情報

提出日時
問題 G - Smaller Sum
ユーザ zer0x_9
言語 C++ 20 (gcc 12.2)
得点 600
コード長 3168 Byte
結果 AC
実行時間 3304 ms
メモリ 8748 KiB

コンパイルエラー

Main.cpp: In function ‘int32_t main()’:
Main.cpp:137:22: warning: unused variable ‘tt_c’ [-Wunused-variable]
  137 |         int t_c = 1, tt_c = 1;
      |                      ^~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 1
AC × 51
セット名 テストケース
Sample sample_01.txt
All sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt
ケース名 結果 実行時間 メモリ
sample_01.txt AC 2 ms 5500 KiB
test_01.txt AC 27 ms 5908 KiB
test_02.txt AC 20 ms 6080 KiB
test_03.txt AC 545 ms 6976 KiB
test_04.txt AC 187 ms 7876 KiB
test_05.txt AC 41 ms 5364 KiB
test_06.txt AC 645 ms 7036 KiB
test_07.txt AC 1136 ms 7824 KiB
test_08.txt AC 1259 ms 8008 KiB
test_09.txt AC 116 ms 5444 KiB
test_10.txt AC 146 ms 7152 KiB
test_11.txt AC 225 ms 5940 KiB
test_12.txt AC 309 ms 8180 KiB
test_13.txt AC 153 ms 7460 KiB
test_14.txt AC 342 ms 6180 KiB
test_15.txt AC 274 ms 6268 KiB
test_16.txt AC 814 ms 6980 KiB
test_17.txt AC 304 ms 7204 KiB
test_18.txt AC 63 ms 5808 KiB
test_19.txt AC 438 ms 6464 KiB
test_20.txt AC 170 ms 5840 KiB
test_21.txt AC 548 ms 8556 KiB
test_22.txt AC 988 ms 8608 KiB
test_23.txt AC 1253 ms 8616 KiB
test_24.txt AC 1511 ms 8580 KiB
test_25.txt AC 1536 ms 8564 KiB
test_26.txt AC 1544 ms 8524 KiB
test_27.txt AC 1553 ms 8700 KiB
test_28.txt AC 1544 ms 8624 KiB
test_29.txt AC 1556 ms 8620 KiB
test_30.txt AC 568 ms 8564 KiB
test_31.txt AC 550 ms 8616 KiB
test_32.txt AC 980 ms 8604 KiB
test_33.txt AC 1265 ms 8600 KiB
test_34.txt AC 1531 ms 8472 KiB
test_35.txt AC 1536 ms 8524 KiB
test_36.txt AC 1550 ms 8612 KiB
test_37.txt AC 1551 ms 8684 KiB
test_38.txt AC 1564 ms 8636 KiB
test_39.txt AC 1554 ms 8680 KiB
test_40.txt AC 569 ms 8612 KiB
test_41.txt AC 1040 ms 8580 KiB
test_42.txt AC 2110 ms 8472 KiB
test_43.txt AC 2668 ms 8564 KiB
test_44.txt AC 3256 ms 8560 KiB
test_45.txt AC 3253 ms 8624 KiB
test_46.txt AC 3304 ms 8616 KiB
test_47.txt AC 3284 ms 8748 KiB
test_48.txt AC 3303 ms 8716 KiB
test_49.txt AC 3278 ms 8712 KiB
test_50.txt AC 1104 ms 8664 KiB