結果

問題 No.694 square1001 and Permutation 3
コンテスト
ユーザー vjudge1
提出日時 2026-10-24 17:38:04
言語 C++14
(gcc 15.3.0 + boost 1.92.0 + ACL)
コンパイル:
g++-15 -O2 -lm -std=c++14 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,466 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 996 ms
コンパイル使用メモリ 184,236 KB
実行使用メモリ 9,924 KB
最終ジャッジ日時 2026-10-24 17:46:03
合計ジャッジ時間 4,118 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample WA * 1
other WA * 9 RE * 4
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e3 + 5;
int n, q, ans, a[maxn], b[maxn], ans1[maxn], ans2[maxn];
signed main()
{
	//freopen("seed.in", "r", stdin);
	//freopen("expeditionbl.out", "w", stdout);
	cin >> n;
	for (int i = 1; i <= n; ++ i)
	{
		cin >> a[i];
	}
	for (int i = 1; i <= n; ++ i)
	{
		cin >> b[i];
		ans1[i] = ans1[i - 1];
		ans2[i] = ans2[i - 1];
		if (a[i] == 2)
		{
			ans2[i] += b[i];
		}
		if (a[i] == 1)
		{
			ans1[i] += b[i];
		}
	}
	cin >> q;
	if (n <= 1000 && q <= 1000)
	{
		while (q --)
		{
			int l, r, x, cur = 0;
			cin >> l >> r >> x;
			for (int i = l; i <= r; ++ i)
			{
				if (x <= 0)
				{
					break;
				}
				if ((x | a[i]) == x)
				{
					x -= a[i];
					cur += b[i];
				}
				if (x <= 0)
				{
					break;
				}
			}
			//cout << cur << '\n';
			ans ^= cur;
		}
		cout << ans;
		return 0;
	}
	while (q --)
	{
		int l, r, x;
		cin >> l >> r >> x;
		if (x == 3)
		{
			int cur = 0;
			for (int i = l; i <= r; ++ i)
			{
				if (x - a[i] >= 0)
				{
					x -= a[i];
					cur += b[i];
				}
				if (x == 0)
				{
					break;
				}
			}
			ans ^= cur;
			continue;
		}
		if (x == 1)
		{
			int pos = upper_bound(ans1 + l, ans1 + 1 + r, ans1[l - 1]) - ans1;
			ans ^= (ans1[pos] - ans1[l - 1]);
			continue;
		}
		if (x == 2)
		{
			int pos = upper_bound(ans2 + l, ans2 + 1 + r, ans2[l - 1]) - ans2;
			ans ^= (ans2[pos] - ans2[l - 1]);
			continue;
		}
	}
	cout << ans;
	return 0;
}
0