Submission #412638

#TimeUsernameProblemLanguageResultExecution timeMemory
412638rumen_mArranging Shoes (IOI19_shoes)C++17
100 / 100
159 ms140188 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; const int maxn = 2e5+5; const int add = 1e5; queue <int> q[maxn]; int pos[maxn]; int ids[maxn]; int cnt =0; struct FENWICK { int fen[maxn]; void update(int idx, int delta) { for(;idx<maxn;idx+=(idx&-idx)) fen[idx]+=delta; } int query(int idx) { int ans = 0; for(;idx>0;idx-=(idx&-idx)) ans+=fen[idx]; return ans; } }; FENWICK F; long long count_swaps(std::vector<int> s) { int i,j; for(i=0;i<s.size();i++) { int x = s[i]+add; if(q[x].empty()) { int y = -s[i]+add; q[y].push(i); pos[i] = cnt; cnt+=2; } else { pos[i] = pos[q[x].front()]+1; q[x].pop(); } } int n = s.size(); for(i=0;i<n;i++) ids[pos[i]] = i; int all = 0; long long ANS = 0; for(i=1;i<n;i+=2) { int x = ids[i]; int dist = ids[i]+all-F.query(ids[i]+1)-i; // cout<<i<<" : "<<ids[i-1]<<" "<<ids[i]<<" : "<<dist<<endl; if(s[ids[i]]<s[ids[i-1]])dist++; ANS+=dist; all++; F.update(ids[i]+1,1); } return ANS; }

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:29:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |  for(i=0;i<s.size();i++)
      |          ~^~~~~~~~~
shoes.cpp:46:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   46 |     for(i=0;i<n;i++)
      |     ^~~
shoes.cpp:48:9: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   48 |         int all = 0;
      |         ^~~
shoes.cpp:53:13: warning: unused variable 'x' [-Wunused-variable]
   53 |         int x = ids[i];
      |             ^
shoes.cpp:28:8: warning: unused variable 'j' [-Wunused-variable]
   28 |  int i,j;
      |        ^
#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...