Submission #955603

#TimeUsernameProblemLanguageResultExecution timeMemory
955603horiseunArranging Shoes (IOI19_shoes)C++17
100 / 100
189 ms157144 KiB
#include <iostream> #include <vector> #include <queue> #include <cstdlib> #include <algorithm> #include "shoes.h" using namespace std; #define ll long long struct Node { int l, r, offset; Node *lft, *rht; Node (int tl, int tr): l(tl), r(tr), offset(0) { if (l + 1 != r) { lft = new Node(l, (l + r) / 2); rht = new Node((l + r) / 2, r); } else { lft = rht = NULL; } } }; void update(Node *x, int l, int r, int v) { if (r <= x->l || x->r <= l) { return; } if (l <= x->l && x->r <= r) { x->offset += v; return; } update(x->lft, l, r, v); update(x->rht, l, r, v); } int query(Node *x, int pos) { if (pos < x->l || x->r <= pos) { return 0; } if (x->l + 1 == x->r) { return x->offset; } return query(x->lft, pos) + query(x->rht, pos) + x->offset; } Node *root; queue<int> unpaired[100005][2]; ll count_swaps(vector<int> s) { root = new Node(0, s.size() + 5); ll ans = 0; for (int i = 0; i < s.size(); i++) { if (s[i] < 0) { if (unpaired[-s[i]][1].size()) { ans += i - (unpaired[-s[i]][1].front() + query(root, unpaired[-s[i]][1].front())); update(root, unpaired[-s[i]][1].front(), i + 1, 1); unpaired[-s[i]][1].pop(); } else { unpaired[-s[i]][0].push(i); } } else { if (unpaired[s[i]][0].size()) { ans += i - (unpaired[s[i]][0].front() + query(root, unpaired[s[i]][0].front())) - 1; update(root, unpaired[s[i]][0].front(), i + 1, 1); unpaired[s[i]][0].pop(); } else { unpaired[s[i]][1].push(i); } } } return ans; }

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:52:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |  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...