Submission #549845

#TimeUsernameProblemLanguageResultExecution timeMemory
549845esomerArranging Shoes (IOI19_shoes)C++17
100 / 100
426 ms35632 KiB
#include "shoes.h" #include<bits/stdc++.h> using namespace std; #define intt long long struct segTree{ vector<intt> v; intt size = 1; void init(intt n){ while(size < n) size *= 2; v.assign(2 * size, 0LL); } void set(int i, int j, int x, int lx, int rx){ if(rx - lx == 1){ v[x] = j; return; } intt m = (lx + rx) / 2; if(i < m) set(i, j, 2 * x + 1, lx, m); else set(i, j, 2 * x + 2, m, rx); v[x] = v[2 * x + 1] + v[2 * x + 2]; } void set(int i, int j){ set(i, j, 0LL, 0LL, size); } intt sum(intt l, intt r, intt x, intt lx, intt rx){ if(lx >= l && rx <= r){ return v[x]; } if(rx <= l || lx >= r) return 0; intt m = (lx + rx) / 2; intt s1 = sum(l, r, 2 * x + 1, lx, m); intt s2 = sum(l, r, 2 * x + 2, m, rx); return s1 + s2; } intt sum(int l, int r){ return sum(l, r, 0, 0, size); } }; long long count_swaps(vector<int> s) { intt ans = 0; segTree st; st.init(s.size()); map<int, set<int>> siz; for(int i = 0; i < s.size(); i++){ siz[s[i]].insert(i); } for(int i = 0; i < s.size(); i++){ if(s[i] == 0) continue; int f = i; siz[s[i]].erase(siz[s[i]].begin()); int sec = *siz[-s[i]].begin(); siz[-s[i]].erase(siz[-s[i]].begin()); ans += sec - f - 1 - st.sum(f, sec); st.set(sec, 1); s[sec] = 0; if(s[f] > 0) ans += 1; } return ans; }

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:51:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |  for(int i = 0; i < s.size(); i++){
      |                 ~~^~~~~~~~~~
shoes.cpp:54:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |  for(int i = 0; i < s.size(); i++){
      |                 ~~^~~~~~~~~~
#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...