/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 320.0 KiB
#2 Accepted 1ms 532.0 KiB
#3 Accepted 24ms 5.508 MiB
#4 Accepted 22ms 5.566 MiB
#5 Accepted 19ms 5.441 MiB
#6 Accepted 22ms 5.441 MiB
#7 Accepted 298ms 31.926 MiB
#8 Accepted 281ms 31.914 MiB
#9 Accepted 303ms 31.887 MiB
#10 Accepted 274ms 31.969 MiB
#11 Accepted 292ms 31.836 MiB
#12 Accepted 298ms 31.922 MiB
#13 Accepted 290ms 31.941 MiB
#14 Accepted 166ms 38.781 MiB
#15 Accepted 173ms 38.668 MiB
#16 Accepted 171ms 38.836 MiB

Code

//#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>

//#include <boost/multiprecision/cpp_int.hpp>
using namespace std;
//using namespace boost::multiprecision;

// Author: Mohamed Bakr

#define ll long long
#define INT int32_t
#define int ll
#define vct vector
//#define int128 number<cpp_int_backend<128, 128, unsigned_magnitude, unchecked, void>>
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define sum(v) accumulate(all(v), 0LL)
#define minv(v) *min_element(all(v))
#define maxv(v) *max_element(all(v))
#define ln "\n"
#define lln cout<<ln
#define umap unordered_map
#define yes cout<<"YES"<<ln
#define no cout<<"NO"<<ln
#define precision(x,y) fixed<<setprecision(y)<<x
#define fastio ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define dbg(ele) cout << #ele <<" : "<< ele << '\n'
#define PI 3.141592653589793238462643383279502884197
#define toDeg(theta) theta*(180.0/PI)
#define toRad(theta) theta*(PI/180.0)

template <typename T, typename C>
istream& operator>>(istream& istream, pair<T, C>& pi) { cin >> pi.first >> pi.second; return istream; }
template <typename T, typename C>
ostream& operator<<(ostream& ostream, pair<T, C>& pi) { cout << pi.first << " " << pi.second;  return ostream; }
template <typename T>
istream& operator>>(istream& istream, vector<T>& v) { for (T& it : v) cin >> it; return istream; }
template <typename T>
ostream& operator<<(ostream& ostream, vector<T>& v) { for (T it : v) cout << it << " "; return ostream; }
template <typename T>
ostream& operator<<(ostream& ostream, set<T>& v) { for (T it : v) cout << it << " "; return ostream; }

bool prime(int num) { if (num <= 1) return false; int ch = 2; while (ch * ch <= num) { if (!(num % ch)) return false; ch++; }return true; }
int fact(int n) { if (n == 0) return 1; return n * fact(n - 1); }
int nPr(int n, int r) { int val = 1; for (int i = n - r + 1; i <= n; i++) val *= i; return val; }
int nCr(int n, int r) { return fact(n) / (fact(r) * fact(n - r)); }
int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); }
int lcm(int a, int b) { return (a / gcd(a, b)) * b; }
int biPow(int x, int y) { int val = 1; while (y) { if (y % 2) { val *= x; y--; } else { x *= x; y /= 2; } }return val; }
int modPow(int x, int y, int m) { int val = 1; x %= m; while (y) { if (y % 2) { val *= x; val %= m; y--; } else { x *= x; x %= m; y /= 2; } }return val % m; }
int sumRng(int l, int r) { return (r - l + 1) * (l + r) / 2; }

string mv[8] = { "U", "R", "D", "L", "UR","UL","DR","DL" };
int xd[9] = { -1, 0, 1,  0, -1, -1, 1,  1, 0 };
int yd[9] = { 0, 1, 0, -1,  1, -1, 1, -1, 0 };
int xk[9] = { -1, 1, 2, -2, -1, 1, 2, -2, 0 };
int yk[9] = { 2, -2, 1, -1, -2, 2, -1, 1, 0 };

struct add_s {
	const int def = 0ll;
	inline int op(const int& l, const int& r) { return l + r; }
};
template<typename seg_t>
struct segtreeLazy
{
	int n = 0;
	vct<int>tree, lazy;
	seg_t func;
	segtreeLazy(const vct<int>& arr) {
		n = arr.size();
		tree.assign(n * 4, func.def);
		lazy.assign(n * 4, 0);
		build(1, 1, n, arr);
	}
	void build(int node, int L, int R, const vct<int>& arr) {
		if (L == R) {
			tree[node] = arr[L - 1];
			return;
		}
		int mid = (L + R) / 2;
		build(2 * node, L, mid, arr);
		build(2 * node + 1, mid + 1, R, arr);
		tree[node] = func.op(tree[2 * node], tree[2 * node + 1]);
	}
	int query(int L, int R) {
		return query(1, 1, n, L, R);
	}
	int query(int node, int L, int R, int l, int r) {
		if (lazy[node]) prop(node, L, R);
		if (R < l || r < L)	return func.def;
		if (l <= L && R <= r) return tree[node];
		int mid = (L + R) / 2;
		return func.op(query(2 * node, L, mid, l, r), query(2 * node + 1, mid + 1, R, l, r));
	}
	void updateRange(int l, int r, int val) {
		updateRange(1, 1, n, l, r, val);
	}
	void updateRange(int node, int L, int R, int l, int r, int val) {
		if (lazy[node]) prop(node, L, R);
		if (R < l || r < L) return;
		if (l <= L && R <= r) {
			lazy[node] ^= val;
			prop(node, L, R);
			return;
		}
		int mid = (L + R) / 2;
		updateRange(2 * node, L, mid, l, r, val);
		updateRange(2 * node + 1, mid + 1, R, l, r, val);
		tree[node] = func.op(tree[2 * node], tree[2 * node + 1]);
	}
	void prop(int node, int L, int R) {
		tree[node] = (R - L + 1) - tree[node];
		if (L != R) {
			lazy[2 * node] ^= lazy[node];
			lazy[2 * node + 1] ^= lazy[node];
		}
		lazy[node] = 0;
	}
};
vct<vct<int>>gra;
vct<int>a,tour;
vct<pair<int,int>>inds;
int ind = 1;
void dfs(int u,int p=-1){
	inds[u].first=ind;
	tour.push_back(a[u]);
	for(int v : gra[u]){
		if(v!=p){
			ind++;
			dfs(v,u);
		}
	}
	inds[u].second=ind;
}
void answer(int test)
{
	int n;cin>>n;
	a=vct<int>(n+1);
	for(int i =1;i<=n;i++) cin>>a[i];
	gra=vct<vct<int>>(n+1);
	inds=vct<pair<int,int>>(n+1);
	for(int i = 1;i<n;i++){
		int u,v;cin>>u>>v;
		gra[u].push_back(v);
		gra[v].push_back(u);
	}
	dfs(1);
	segtreeLazy<add_s>seg(tour);
	int q;cin>>q;
	while(q--){
		int op,k;cin>>op>>k;
		int l = inds[k].first, r = inds[k].second;
		if(op==1){
			seg.updateRange(l,r,1);
		}
		else{
			cout<<seg.query(l,r)<<ln;
		}
	}
}
bool multiTests = false;
INT main()
{
#ifdef Mhmd_Bakr
	//Contest : -
	//Problem : -
	freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
#endif
	fastio;
	int tests = 1;
	if (multiTests) cin >> tests;
	for (int test = 1; test <= tests; test++)
	{
		//cout << "Case #" << test << ": ";
		answer(test);
	}
}

Information

Submit By
Type
Submission
Problem
P1101 Mr. Heart and the Enchanted Lights
Contest
Brain Booster #6
Language
C++17 (G++ 13.2.0)
Submit At
2024-10-03 15:58:38
Judged At
2024-12-17 11:35:37
Judged By
Score
100
Total Time
303ms
Peak Memory
38.836 MiB