Submission #209936

#TimeUsernameProblemLanguageResultExecution timeMemory
209936SegtreeArranging Shoes (IOI19_shoes)C++14
10 / 100
8 ms4988 KiB
#include"shoes.h" #include<iostream> #include<algorithm> #include<vector> #include<queue> #include<set> #include<unordered_set> using namespace std; typedef long long ll; typedef pair<ll,ll> P; typedef unordered_set<ll> uset; #define rep(i,n) for(int i=0;i<n;i++) #define rrep(i,n) for(int i=0;i<=n;i++) #define chmin(a,b) a=min(a,b) #define chmax(a,b) a=max(a,b) #define all(x) x.begin(),x.end() #pragma gcc optimize("O3") #pragma gcc optimize("unroll-loops") #pragma gcc target("avx2,see4") #define N 200010 ll dat[N]; void add(ll i,ll x){ for(;i<N;i+=i&-i)dat[i]+=x; } ll sum(ll i){ ll res=0; for(;i>0;i-=i&-i)res+=dat[i]; return res; } ll calc_tentou(vector<ll> p){ int n=p.size(); rep(i,n)p[i]++; rep(i,n)dat[i]=0; ll ans=0; rep(i,n){ ans+=i-sum(p[i]); add(p[i],1); } return ans; } ll count_swaps(vector<int> s){ int n=s.size()/2; vector<P> L,R;//左・右の靴の{サイズ、場所} for(int i=0;i<2*n;i++){ if(s[i]<0)L.push_back(make_pair(-s[i],i)); else R.push_back(make_pair(s[i],i)); } vector<ll> pl[N];//pl[x]:=サイズxの右の靴のある場所、後ろが小さい for(auto e:R){ pl[e.first].push_back(e.second); } ll ans=0; rep(i,N)reverse(all(pl[i])); vector<ll> p(n);//p[i]:=左がi番目にあるペアの右側 for(int i=0;i<n;i++){ p[i]=pl[L[i].first].back(); pl[L[i].first].pop_back(); ans+=abs(L[i].second-p[i])-1; ans+=(L[i].second>p[i]); } //ans+=calc_tentou(p); return ans; }/* int main(){ ll n; cin>>n; vector<int> s(2*n); rep(i,2*n)cin>>s[i]; cout<<count_swaps(s)<<endl; }*/

Compilation message (stderr)

shoes.cpp:17:0: warning: ignoring #pragma gcc optimize [-Wunknown-pragmas]
 #pragma gcc optimize("O3")
 
shoes.cpp:18:0: warning: ignoring #pragma gcc optimize [-Wunknown-pragmas]
 #pragma gcc optimize("unroll-loops")
 
shoes.cpp:19:0: warning: ignoring #pragma gcc target [-Wunknown-pragmas]
 #pragma gcc target("avx2,see4")
#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...