Submission #1290739

#TimeUsernameProblemLanguageResultExecution timeMemory
1290739lambd47Arranging Shoes (IOI19_shoes)C++20
45 / 100
121 ms140636 KiB
#include<bits/stdc++.h> #include "shoes.h" using namespace std; #define ll long long #define L(i,j,k) for(int i=(j);i<=(k);i++) #define R(i,j,k) for(int i=(j);i>=(k);i--) #define sz(v) ((int)(v).size()) #define all(v) (v).begin(),(v).end() long long count_swaps(std::vector<int> vec) { int n=sz(vec); vector<int> negs; vector<int> ord(n+4); vector<queue<int>> lst(n+4); int m=n/2; vector<int> par(4+n); L(i,1,n){ int a=vec[i-1]; if(a<0)negs.push_back(i); lst[a+m].push(i); if(!lst[a+m].empty() && !lst[m-a].empty()){ int x=lst[a+m].front(); lst[a+m].pop(); int y=lst[m-a].front(); lst[m-a].pop(); par[x]=y; par[y]=x; } } int at=1; for(auto a:negs){ ord[a]=at++; ord[par[a]]=at++; } //L(i,1,n)cout<<par[i]; vector<int> rord(n+1,0); L(i,1,n){ rord[ord[i]]=i; } vector<int> bt(n+2); auto upd=[&](int id)->void{ while(id<n+1){ bt[id]++; id+=(id&(-id)); } }; auto query=[&](int id)->int{ int ret=0; while(id>0){ ret+=bt[id]; id-=(id&(-id)); } return ret; }; ll ans=0; L(i,1,n){ ans+=query(n)-query(rord[i]); upd(rord[i]); } return ans; } /* ok, primeiro pareio depois conto a qntd de inversoes e gg */
#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...