Submission #160377

#TimeUsernameProblemLanguageResultExecution timeMemory
160377georgerapeanuArranging Shoes (IOI19_shoes)C++17
100 / 100
431 ms274456 KiB
#include "shoes.h" #pragma once #include <deque> #include <algorithm> using namespace std; deque<int> left[200005]; deque<int> right[200005]; int aib[200005]; bool viz[200005]; void update(int pos,int val){ for(;pos <= 2e5 + 1;pos += (-pos) & pos){ aib[pos] += val; } } int query(int pos){ int ans = 0; for(;pos;pos -= (-pos) & pos){ ans += aib[pos]; } return ans; } long long count_swaps(vector<int> s) { reverse(s.begin(),s.end()); s.push_back(0); reverse(s.begin(),s.end()); for(int i = 1;i < (int)s.size();i++){ if(s[i] < 0){ left[-s[i]].push_back(i); } else{ right[s[i]].push_back(i); } update(i,1); } long long ans = 0; for(int i = 1;i < (int)s.size();i++){ if(viz[i] == true){ continue; } if(s[i] < 0){ int pos = right[-s[i]].front(); right[-s[i]].pop_front(); left[-s[i]].pop_front(); update(pos,-1); viz[pos] = true; update(i,-1); viz[i] = true; ans += query(pos) - query(i); } else{ int pos = left[s[i]].front(); left[s[i]].pop_front(); right[s[i]].pop_front(); update(pos,-1); viz[pos] = true; ans += query(pos) - query(i - 1); update(i,-1); viz[i] = true; } } return ans; }

Compilation message (stderr)

shoes.cpp:3:9: warning: #pragma once in main file
 #pragma once
         ^~~~
#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...