Submission #729532

#TimeUsernameProblemLanguageResultExecution timeMemory
729532vjudge1Arranging Shoes (IOI19_shoes)C++17
100 / 100
377 ms34204 KiB
#include "shoes.h" #include<bits/stdc++.h> #define INF 1e9+7 #define ll long long #define ull unsigned ll #define pii pair<int,int> #define pll pair<ll,ll> #define pcc pair<char,char> #define pdd pair<long double,long double> #define pipii pair<int,pii> #define plpll pair<ll,pll> #define vi vector<int> #define vvi vector<vi> #define v3i vector<vvi> #define v4i vector<v3i> #define fi first #define se second #define mp make_pair #define eb emplace_back #define ins insert #define ln '\n' #define all(v) v.begin(),v.end() using namespace std; const int up=2e5+5; int tree[4*up]; void update(int node,int l,int r,int pos,int val){ if(l==r){ tree[node]=val; } else{ int mid=(l+r)>>1; if(pos<=mid){ update(node<<1,l,mid,pos,val); } else{ update((node<<1)+1,mid+1,r,pos,val); } tree[node]=tree[node<<1]+tree[(node<<1)+1]; } } int query(int node,int l,int r,int ql,int qr){ if(ql>r or l>qr) return 0; if(ql<=l&&r<=qr) return tree[node]; int mid=(l+r)>>1; return query(node<<1,l,mid,ql,qr)+query((node<<1)+1,mid+1,r,ql,qr); } ll count_swaps(vi s){ ll res=0; int n=s.size(); map<int,set<int>>v; for(int i=0;i<n;++i){ v[s[i]].ins(i); update(1,1,n,i+1,1); } int color[n]; memset(color,0,sizeof(color)); for(int i=0;i<n;++i){ if(color[i]) continue; int k=-s[i]; int t=*v[k].lower_bound(i); color[t]=1; res+=query(1,1,n,i+1,t+1)-1; // cout<<query(1,1,n,i+1,t+1)<<ln; if(s[i]<0) res--; //cout<<res<<ln; v[k].erase(t); update(1,1,n,t+1,0); } return res; }
#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...