Submission #796829

#TimeUsernameProblemLanguageResultExecution timeMemory
796829HD1Arranging Shoes (IOI19_shoes)C++14
50 / 100
274 ms298520 KiB
//we are all lost trying to be someone. #include "shoes.h" #include <bits/stdc++.h> #define fastio ios_base::sync_with_stdio(0); cin.tie(0); #define sz(x) ll(x.size()) #define reve(x) reverse(x.begin(),x.end()) #define ff first #define ss second #define pb push_back using namespace std; typedef int ll; typedef long double ld; const ll MAX=1e5+100; const ll mod=1e9+7; const ll inf=1e9; int tree[MAX*4], A[MAX*4]; int n=0; map<int,queue<int>>M; void build_tree(int id, int l, int r){ if(r-l==1){ tree[id]=l; return; } int mid=(l+r)/2; build_tree(id*2, l, mid); build_tree(id*2+1, mid, r); return; } void update(int id, int l, int r, int L, int R){ if(l>=R or r<=L) return; if(l>=L and r<=R){ tree[id]++; return; } int mid=(l+r)/2; update(id*2, l, mid, L, R); update(id*2+1, mid, r, L, R); return; } int ns=0; void query(int id, int l, int r, int L, int R){ if(l>=R or r<=L) return; ns+=tree[id]; if(l>=L and r<=R){ return; } ll mid=(l+r)/2; query(id*2, l, mid, L, R); query(id*2+1, mid, r, L, R); return; } ll aport(ll p, ll q, ll x, ll y){ ns=0; query(1, 0,n, p,p+1); M[y].pop(); ll a=ns; ns=0; query(1, 0, n, q, q+1); M[y*-1].pop(); ll b=ns; if(x==1)update(1,0, n,p+1,q); else update(1,0, n,p,q); return b-a; } long long count_swaps(vector<int> c){ n=sz(c); for( ll i=0; i<n ; i++){ M[c[i]].push(i); } long long ans=0; build_tree(1,0, n); for(ll i = 0; i < n; i++){ if(sz(M[c[i]])>0){ if(M[c[i]].front()!=i) continue; ll p=M[c[i]].front(); ll q=M[c[i]*-1].front(); if(c[i]<0){ ans+=aport(p,q,1, c[i])-1; } else{ ans+=aport(p,q,0,c[i]); } } } return ans; } /*int main(){ ll a; cin>>n; vector<ll> k; for(ll i=0; i<n; i++){ cin>>a; k.push_back(a); } cout<<count_swaps(k)<<'\n'; }*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...