Submission #412090

#TimeUsernameProblemLanguageResultExecution timeMemory
412090arayiBirthday gift (IZhO18_treearray)C++17
100 / 100
1177 ms181776 KiB
//Arayi #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <queue> #include <stack> #include <algorithm> #include <math.h> #include <vector> #include <cstring> #include <ctime> #include <set> #include <bitset> #include <map> #include <unordered_map> #include <unordered_set> #include <iomanip> #include <ctime> #include <climits> #include <cassert> #include <chrono> #include <random> #include <complex> #define fr first #define sc second #define MP make_pair #define ad push_back #define PB push_back #define fastio ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #define lli long long int #define y1 arayikhalatyan #define j1 jigglypuff #define ld long double #define itn int #define pir pair<int, int> #define all(x) (x).begin(), (x).end() #define str string #define enl endl #define en endl #define cd complex<long double> #define vcd vector<cd> #define vii vector<int> #define vlli vector<lli> using namespace std; lli gcd(lli a, lli b) { return (b == 0LL ? a : gcd(b, a % b)); } ld dist(ld x, ld y1, ld x2, ld y2) { return sqrt((x - x2) * (x - x2) + (y1 - y2) * (y1 - y2)); } lli S(lli a) { return (a * (a + 1LL)) / 2; } mt19937 rnd(363542); char vow[] = { 'a', 'e', 'i', 'o', 'u' }; int dx[] = { 0, -1, 0, 1, -1, -1, 1, 1, 0 }; int dy[] = { -1, 0, 1, 0, -1, 1, -1, 1, 0 }; const int N = 1e6 + 30; lli mod = 1e17; const ld pi = acos(-1); const int T = 550; lli bp(lli a, lli b = mod - 2LL) { lli ret = 1; while (b) { if (b & 1) ret *= a, ret %= mod; a *= a; a %= mod; b >>= 1; } return ret; } ostream& operator<<(ostream& c, pir a) { c << a.fr << " " << a.sc; return c; } template<class T> void maxi(T& a, T b) { a = max(a, b); } template <class T> void mini(T& a, T b) { a = min(a, b); } int n, m, q; int xr[N], pr[N][20]; vii g[N]; int a[N], b[N]; set<int> fp[N], f[N]; void dfs(int v, int par) { pr[v][0]=par; for(auto p : g[v]) { if(p==par) continue; xr[p]=xr[v]+1; dfs(p,v); } } int walk(int u, int d) { for (int i = 0; i < 20; i++) if((1<<i)&d) u=pr[u][i]; return u; } int lca(int a, int b) { if(xr[a] > xr[b]) swap(a,b); b = walk(b, xr[b]-xr[a]); if(a == b) return a; for(int i = 20 - 1; i >= 0; i--) if(pr[a][i] != pr[b][i]) a = pr[a][i], b = pr[b][i]; return pr[a][0]; } int main() { fastio; cin >> n >> m >> q ; for (int i = 0; i < n - 1; i++) { int a, b; cin >> a >> b; g[a].ad(b); g[b].ad(a); } dfs(1,0); for(int j = 1; j < 20; j++) for (int i = 1; i <= n; i++) pr[i][j]=pr[pr[i][j-1]][j-1]; for (int i = 0; i < m; i++) { cin >> a[i]; f[a[i]].insert(i); if(i) b[i - 1]=lca(a[i], a[i-1]), fp[b[i - 1]].insert(i - 1); } while(q--) { int A; cin>>A; if(A==1) { int i1, x; cin>>i1>>x; i1--; f[a[i1]].erase(i1); a[i1]=x; f[a[i1]].insert(i1); if(i1) { fp[b[i1 - 1]].erase(i1-1); b[i1-1]=lca(a[i1-1],a[i1]); fp[b[i1-1]].insert(i1-1); } if(i1 < m - 1) { fp[b[i1]].erase(i1); b[i1]=lca(a[i1], a[i1+1]); fp[b[i1]].insert(i1); } } else { int l, r, x; cin>>l>>r>>x; l--,r--; auto i = f[x].lower_bound(l); if(i != f[x].end() && *i <= r) { cout<<*i+1<<" "<<*i+1<<"\n"; continue; } r--; auto i1 = fp[x].lower_bound(l); if(i1 == fp[x].end() || *i1 > r) cout<<"-1 -1\n"; else cout<<*i1+1<<" "<<*i1+2<<"\n"; } } return 0; } /* 5 4 4 1 2 3 1 3 4 5 3 4 5 2 3 2 1 3 1 1 3 5 2 3 4 5 2 1 3 1 __ *(><)* \/ / ||/ --|| || /\ / \ / \ */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...