Submission #626712

#TimeUsernameProblemLanguageResultExecution timeMemory
626712MatBadConstruction of Highway (JOI18_construction)C++14
16 / 100
349 ms544 KiB
#include<bits/stdc++.h> //#pragma GCC optimize ("O2,unroll-loops") #pragma GCC optimize("no-stack-protector,fast-math") using namespace std; #define F first #define S second #define pb push_back #define ppb pop_back #define lb lower_bound #define ub upper_bound #define pc __builtin_popcount #define cl __builtin_clz #define FOR(i,a,b) for(int i=a;i<=b;i++) #define FORR(i,a,b) for(int i=a;i>=b;i--) #define debug(x) cerr<<#x<<" : &"<<x<<"&\n" #define wall() cerr<<'\n'<<"-------------------------------\n" typedef long long ll; typedef long double ld; typedef pair<int , int> pii; typedef pair<bool , pii> piii; const ll MX=5e3+5, M=600, MOD = 1e9+7, inf = 1e9+20, infl = 1e16, LOG = 18, A = 27, del = 10067; int n, fen[MX], p[MX], c[MX]; void add(int x, int N){ while(x<=N){ fen[x]++; x+= x&(-x); } } int ask(int x, int N){ int res=0; while(x){ res+= fen[x]; x-= x&(-x); } return res; } int cntinv(vector<int>& vec){ int N = vec.size(); pii g[N+1]={}; int rnk[N+1]={}; FOR(i, 1, N) g[i] = pii(vec[i-1], i-1); sort(g+1, g+N+1); FOR(i, 1, N) rnk[g[i].S] = rnk[g[i-1].S]+(g[i].F>g[i-1].F); memset(fen, 0, (N+1)*sizeof(int)); int res=0; FOR(i, 0, N-1){ res+= i-ask(rnk[i], N); add(rnk[i], N); } return res; } void solve(int v){ vector<int> vec; for(int u=p[v]; u!=0; u=p[u]) vec.pb(c[u]); reverse(vec.begin(), vec.end()); cout<<cntinv(vec)<<'\n';; for(int u=p[v]; u!=0; u=p[u]) c[u]=c[v]; } int main(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin>>n; p[1] = 0; FOR(i, 1, n) cin>>c[i]; FOR(i, 1, n-1){ int u, v; cin>>u>>v; p[v] = u; solve(v); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...