제출 #1268639

#제출 시각아이디문제언어결과실행 시간메모리
1268639jumpArranging Shoes (IOI19_shoes)C++20
100 / 100
179 ms25684 KiB
#include <bits/stdc++.h> std::map<long long,std::vector<long long>> lp; long long fwk[300000]; bool mark[300000]; long long upd(long long idx,long long n){ while(idx<300000){ fwk[idx]+=n; idx += ((idx) & (-idx)); //std::cout << idx; } return 1; } long long look(long long idx){ long long sum = 0; while(idx>0){ sum+=fwk[idx]; idx -= idx & -idx; } return sum; } long long count_swaps(std::vector<int> s){ for(long long i=1;i<=200010;i++){ upd(i,1); } //std::cout << 123; for(long long i=s.size()-1;i>=0;i--){ auto num = s[i]; if(lp.find(num)==lp.end()){ lp[num]={i+1}; } else{ lp[num].push_back(i+1); } } long long sum = 0; for(long long i=0;i<s.size();i++){ if(!mark[i+1]){ mark[i+1]=true; }else continue; upd(i+1,-1); long long match = lp[-s[i]].back();lp[-s[i]].pop_back(); lp[s[i]].pop_back(); sum+=look(match)-1; //std::cout << i+1 << ' ' << match << ' ' << look(match) << '\n'; upd(match,-1); mark[match]=true; if(s[i]>0)sum+=1; } return sum; }
#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...