Submission #204238

#TimeUsernameProblemLanguageResultExecution timeMemory
204238theStaticMindConstruction of Highway (JOI18_construction)C++14
16 / 100
2049 ms16280 KiB
#include<bits/stdc++.h> #define pb push_back #define ii pair<int,int> #define all(x) (x).begin(),(x).end() #define sz(x) (int)(x).size() #define INF 100000000000000000 #define modulo 1000000007 #define mod 998244353 #define int long long int using namespace std; struct Fenwick{ vector<int> bit; int size; void modify(int j, int v){ j++; for(; j < size; j += j & -j)bit[j] += v; } int query(int j){ j++; int v = 0; for(; j > 0; j -= j & -j)v += bit[j]; return v; } int rangequery(int a, int b){ return query(b) - query(a - 1); } void rangeupdate(int a, int b, int v){ modify(a, v); modify(b + 1, -v); } Fenwick(int s){ s += 5; size = s; bit = vector<int>(s, 0); } }; const int N = 1e5 + 5; vector<int> adj[N]; vector<ii> Q; vector<int> val(N); vector<int> anc(N, 0); vector<ii> W; void dfs(int x, int pre){ for(auto y : adj[x]){ if(y == pre) continue; anc[y] = x; dfs(y, x); } } void query(int x){ while(x != 0){ W.pb({val[x], 1}); x = anc[x]; } reverse(all(W)); } void update(int x, int v){ while(x != 0){ val[x] = v; x = anc[x]; } reverse(all(W)); } void compress(vector<ii>& arr){ map<int,int> data; for(auto x : arr) data[x.first] = 0; int ind = sz(arr); for(auto& x : data)x.second = ind--; for(auto& x : arr) x.first = data[x.first]; } int ans(vector<ii>& arr){ compress(arr); Fenwick bit(sz(arr)); int ret = 0; for(auto x : arr){ ret += bit.query(x.first - 1); bit.modify(x.first, x.second); } return ret; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; for(int i = 1; i <= n; i++) cin >> val[i]; for(int i = 0; i < n - 1; i++){ int x, y; cin >> x >> y; adj[x].pb(y); adj[y].pb(x); Q.pb({x, y}); } dfs(1, 0); for(auto p : Q){ query(p.first); cout << ans(W) << "\n"; W.clear(); update(p.second, val[p.second]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...