제출 #1129530

#제출 시각아이디문제언어결과실행 시간메모리
1129530zhasynBirthday gift (IZhO18_treearray)C++20
0 / 100
4 ms4932 KiB
#include <bits/stdc++.h> #define pb push_back #define pf push_front using namespace std; #define F first #define S second typedef long long ll; #define pii pair <int, int> #define pll pair <ll, ll> typedef long double ld; const ll N = 2 * 1e5 + 100, M = 500 + 10, len = 315, inf = 1e18; const ll mod = 998244353; ll um(ll a, ll b){ return (1LL * a * b) % mod; } ll subr(ll a, ll b){ return ((1LL * a - b) % mod + mod) % mod; } ll bp(ll x, ll step){ ll res = 1; while(step){ if(step & 1) res = um(res, x); x = um(x, x); step /= 2; } return res; } ll inv(ll x){ return bp(x, mod - 2); } int tin[N], tout[N], timer, a[N]; vector <int> q[N]; bool was; int from, to; void dfs(int v, int p = -1){ tin[v] = ++timer; for(auto u : q[v]){ if(u == p) continue; dfs(u, v); } tout[v] = timer; } void check(int mn, int mx, int x){ if(mn == INT_MAX) return; //cout << mn << " "<< mx << endl; int l = -1, r = (int)q[x].size() - 1; while(r - l > 1){ int mid = (r + l) / 2; if(tout[q[x][mid]] >= tin[mn]) r = mid; else l = mid; } if(tout[r] < tin[mx]){ if(was == false){ cout << from << " "<< to << endl; was= true; } } } int main() { //ios_base::sync_with_stdio(false); //cin.tie(nullptr); //cout.tie(nullptr); int n, m, qr; cin >> n >> m >> qr; for(int i = 0, a, b; i < n - 1; i++){ cin >> a >> b; q[a].pb(b); q[b].pb(a); } dfs(1); for(int i = 1; i <= m; i++){ cin >> a[i]; } for(int i = 0, code, l, r, x, pos; i < qr; i++){ cin >> code; if(code == 1){ cin >> pos >> x; a[pos] = x; } else{ cin >> l >> r >> x; int mn = INT_MAX, mx = INT_MIN; was = false; from = l; for(int j = l; j <= r; j++){ if(tin[x] <= tin[a[j]] && tout[a[j]] <= tout[x]){ mn = min(mn, tin[a[j]]); mx = max(mx, tin[a[j]]); } else{ to = j - 1; check(mn, mx, x); mn = INT_MAX; mx = INT_MIN; from = j + 1; } } to = r; check(mn, mx, x); if(was == false) cout << "-1 -1\n"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...