Submission #52405806


Source Code Expand

#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 = 450;
		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;
}

Submission Info

Submission Time
Task G - Smaller Sum
User zer0x_9
Language C++ 20 (gcc 12.2)
Score 0
Code Size 3168 Byte
Status TLE
Exec Time 3655 ms
Memory 7400 KiB

Compile Error

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;
      |                      ^~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 600
Status
AC × 1
AC × 45
TLE × 6
Set Name Test Cases
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
Case Name Status Exec Time Memory
sample_01.txt AC 2 ms 4592 KiB
test_01.txt AC 24 ms 5040 KiB
test_02.txt AC 19 ms 5164 KiB
test_03.txt AC 588 ms 5896 KiB
test_04.txt AC 202 ms 6432 KiB
test_05.txt AC 37 ms 4636 KiB
test_06.txt AC 687 ms 5900 KiB
test_07.txt AC 1227 ms 6540 KiB
test_08.txt AC 1367 ms 6836 KiB
test_09.txt AC 105 ms 4500 KiB
test_10.txt AC 145 ms 6156 KiB
test_11.txt AC 211 ms 5148 KiB
test_12.txt AC 345 ms 6776 KiB
test_13.txt AC 167 ms 6192 KiB
test_14.txt AC 380 ms 5436 KiB
test_15.txt AC 284 ms 5428 KiB
test_16.txt AC 875 ms 5920 KiB
test_17.txt AC 325 ms 6088 KiB
test_18.txt AC 59 ms 4940 KiB
test_19.txt AC 456 ms 5688 KiB
test_20.txt AC 149 ms 4976 KiB
test_21.txt AC 576 ms 7212 KiB
test_22.txt AC 1121 ms 7252 KiB
test_23.txt AC 1384 ms 7220 KiB
test_24.txt AC 1655 ms 7236 KiB
test_25.txt AC 1664 ms 7240 KiB
test_26.txt AC 1681 ms 7140 KiB
test_27.txt AC 1687 ms 7268 KiB
test_28.txt AC 1686 ms 7368 KiB
test_29.txt AC 1689 ms 7328 KiB
test_30.txt AC 582 ms 7200 KiB
test_31.txt AC 574 ms 7248 KiB
test_32.txt AC 1127 ms 7300 KiB
test_33.txt AC 1391 ms 7140 KiB
test_34.txt AC 1661 ms 7236 KiB
test_35.txt AC 1669 ms 7364 KiB
test_36.txt AC 1679 ms 7264 KiB
test_37.txt AC 1680 ms 7332 KiB
test_38.txt AC 1702 ms 7380 KiB
test_39.txt AC 1691 ms 7292 KiB
test_40.txt AC 583 ms 7220 KiB
test_41.txt AC 1128 ms 7100 KiB
test_42.txt AC 2475 ms 7232 KiB
test_43.txt AC 3021 ms 7248 KiB
test_44.txt TLE 3628 ms 7256 KiB
test_45.txt TLE 3640 ms 7248 KiB
test_46.txt TLE 3655 ms 7272 KiB
test_47.txt TLE 3654 ms 7400 KiB
test_48.txt TLE 3654 ms 7384 KiB
test_49.txt TLE 3641 ms 7396 KiB
test_50.txt AC 1194 ms 7228 KiB