Submission #199101

#TimeUsernameProblemLanguageResultExecution timeMemory
199101redaArranging Shoes (IOI19_shoes)C++14
10 / 100
8 ms2680 KiB
#include<bits/stdc++.h> #define ll long long #pragma GCC optimize ("Ofast","unroll-loops") using namespace std; #define all(x) x.begin(),x.end() #define pb push_back const ll MAXN = 1e5 + 4 ; ll BIT[MAXN]; bool vis[MAXN]; vector<ll> adj[MAXN]; ll n ; void update ( ll idx , ll x) { while(idx<=MAXN) { BIT[idx]+=x; idx+=idx&(-idx); } } ll getsum(ll idx) { ll sum =0; while(idx>0) { sum+=BIT[idx]; idx-=idx&(-idx); } return sum; } ll getran(ll a , ll b) { if(a) return getsum(b)-getsum(a-1); return getsum(b); } ll get_id(ll x){ if(x > 0)return x; else return -x+n; } long long count_swaps (vector<int>s) { n = s.size()/2; set<pair<ll,ll>>pq ; ll ans = 0 ; for(ll i =0 ;i <s.size();i++) { pq.insert({i,s[i]}); if(s[i]>0)adj[s[i]].pb(i); else { adj[get_id(s[i])].pb(i); } } for(auto it : adj) { reverse(all(it)); } while(pq.size()) { if(vis[pq.begin()->first]) { pq.erase(pq.begin()); continue; } ll cur = -pq.begin()->second; ll idx = get_id(cur); ll to = adj[idx].back(); adj[get_id(-cur)].pop_back(); ll dist=(to+getran(to,MAXN-1))-(pq.begin()->first+getran(pq.begin()->first,MAXN-1)); if(pq.begin()->second < 0)dist--; ans +=dist; vis[pq.begin()->first]=1; vis[to]=1; update(to,1); } return ans ; } /* int main () { ios_base::sync_with_stdio(0); int n; cin >> n; vector<int> v; for(int i(0); i < n;i++){ int x; cin >> x; v.push_back(x); } cout << count_swaps(v); return 0; } */

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:45:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(ll i =0 ;i <s.size();i++)
                ~~^~~~~~~~~
#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...