제출 #440613

#제출 시각아이디문제언어결과실행 시간메모리
440613julian33Arranging Shoes (IOI19_shoes)C++14
100 / 100
283 ms276164 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #define deb(...) logger(#__VA_ARGS__, __VA_ARGS__) template<typename ...Args> void logger(string vars, Args&&... values) { cerr<<vars<<" = "; string delim=""; (...,(cerr<<delim<<values,delim=", ")); cerr<<"\n"; } #else #define deb(...) logger(#__VA_ARGS__, __VA_ARGS__) template<typename ...Args> void logger(string vars, Args&&... values) {} #endif #define pb push_back #define sz(x) (int)(x.size()) typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; template<typename T> inline void maxa(T& a,T b){a=max(a,b);} template<typename T> inline void mina(T& a,T b){a=min(a,b);} const int mxN=2e5+5; int bit[mxN]; queue<int> pos[mxN],neg[mxN]; vector<pii> prs; void upd(int x){while(x<mxN){bit[x]++;x+=x&-x;}} int sum(int x){int res=0;while(x){res+=bit[x];x-=x&-x;}return res;} long long count_swaps(std::vector<int> S){ int n=sz(S); int cur=0; vector<int> go(n),p(n); for(int i=0;i<n;i++){ int val=abs(S[i]); if(S[i]<0){ if(sz(pos[val])){ prs.pb(minmax({i,pos[val].front()})); pos[val].pop(); } else{ neg[val].push(i); } } else{ if(sz(neg[val])){ prs.pb(minmax({neg[val].front(),i})); neg[val].pop(); } else{ pos[val].push(i); } } p[i]=i; } sort(prs.begin(),prs.end()); for(pii &i:prs){ go[i.first]=cur++; go[i.second]=cur++; if(S[i.first]>0){ swap(go[i.first],go[i.second]); } } ll ans=0; sort(p.begin(),p.end(),[&](int x,int y){return go[x]<go[y];}); for(int &i:p){ ans+=sum(n)-sum(i); upd(i+1); assert(ans>=0); } 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...