Submission #797494

#TimeUsernameProblemLanguageResultExecution timeMemory
797494LiudasArranging Shoes (IOI19_shoes)C++17
100 / 100
665 ms157324 KiB
#include <bits/stdc++.h> using namespace std; struct fenwick_tree{ vector<int> tree; fenwick_tree(int N){ tree.assign(N + 5, 0); for(int i = 1; i <= N; i ++){ for(int j = i; j < tree.size(); j += (j & -j)){ tree[j] ++; } } } void rem(int p){ for(int i = p; i < tree.size(); i += (i & -i)){ tree[i]--; } } int sum(int p){ int s = 0; for(int i = p; i > 0; i -= (i & -i)){ s += tree[i]; } return s; } }; long long count_swaps(vector<int> S){ long long N = S.size(); fenwick_tree tree(N); map<int, queue<int>> arr; set<int> left; long long ans = 0; for(int i = 0; i < N; i ++){ left.insert(i); arr[S[i]].push(i); } for(int i = 0; i < N / 2; i ++){ int s = *left.begin(); left.erase(s); int b = arr[-S[s]].front(); left.erase(b); arr[S[s]].pop(); arr[-S[s]].pop(); if(S[s] > 0){ ans += tree.sum(b+1) - tree.sum(s+1); } else{ ans += tree.sum(b+1) - tree.sum(s+1) - 1; } tree.rem(s+1); tree.rem(b+1); } return ans; }

Compilation message (stderr)

shoes.cpp: In constructor 'fenwick_tree::fenwick_tree(int)':
shoes.cpp:8:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    8 |             for(int j = i; j < tree.size(); j += (j & -j)){
      |                            ~~^~~~~~~~~~~~~
shoes.cpp: In member function 'void fenwick_tree::rem(int)':
shoes.cpp:14:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |         for(int i = p; i < tree.size(); i += (i & -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...