Submission #1218799

#TimeUsernameProblemLanguageResultExecution timeMemory
1218799vtnooArranging Shoes (IOI19_shoes)C++20
100 / 100
368 ms31724 KiB
#include <bits/stdc++.h> #define forsn(i,s,n) for(int i=s; i<n; ++i) #define forn(i,n) forsn(i,0,n) #define pb push_back #define snd second #define fst first #define all(x) x.begin(), x.end() #define imp(x) for(auto __:x)cout<<__<<" "; cout<<endl; #define sz(c) int((c).size()) using namespace std; typedef long long ll; typedef pair<int, int> ii; typedef vector<int> vi; const int N=200'010; struct FTree{ vector<long long> fen; void init(){ fen.resize(N, 0); } ll sum(int x){ ll v=0; for(;x;x-=(x&-x)){ v+=fen[x]; } return v; } void upd(int x, int v){ for(;x<N;x+=(x&-x)){ fen[x]+=v; } } }; ll count_swaps(vi s) { int n=sz(s); ll ans=0; FTree fen; fen.init(); forsn(i,1,N)fen.upd(i,1); map<int, set<int>> mp; for(int i=0;i<n;i++){ mp[s[i]].insert(i); } for(int i=0; i<n; i++){ //~ cout<<"===================="<<endl; //~ cout<<s[i]<<endl; if(s[i]<0){ //left if(!mp[s[i]].count(i))continue; mp[s[i]].erase(i); if(mp[abs(s[i])].empty())continue; int v=*mp[abs(s[i])].begin(); int cnt_pos=fen.sum(v)-fen.sum(i+1); //~ cout<<cnt_pos<<endl; ans+=cnt_pos; int l=i+1, r=v+1; fen.upd(l, -1); fen.upd(r, -1); mp[abs(s[i])].erase(mp[abs(s[i])].begin()); }else{ //right if(!mp[s[i]].count(i))continue; mp[s[i]].erase(i); if(mp[-s[i]].empty())continue; int v=*mp[-s[i]].begin(); int cnt_pos=fen.sum(v)-fen.sum(i+1); //~ cout<<cnt_pos<<endl; ans+=cnt_pos+1; int l=i+1, r=v+1; fen.upd(l, -1); fen.upd(r, -1); mp[-s[i]].erase(mp[-s[i]].begin()); } } return ans; }
#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...