Submission #228319

#TimeUsernameProblemLanguageResultExecution timeMemory
228319chctxdy68Arranging Shoes (IOI19_shoes)C++14
100 / 100
315 ms143864 KiB
#include "shoes.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define ll long long #define ull unsigned long long #define ld long double #define pii pair <int, int> #define pll pair <ll, ll> #define pci pair <char, int> #define pld pair <ld, ld> #define ppld pair <pld, pld> #define ppll pair <pll, pll> #define pldl pair <ld, ll> #define vll vector <ll> #define vvll vector <vll> #define vpll vector <pll> #define pb push_back #define eb emplace_back #define mp make_pair #define fi first #define se second #define mll map <ll, ll> #define fastmap gp_hash_table #define cd complex <double> #define vcd vector <cd> #define PI 3.14159265358979 #define ordered_set tree <ll, null_type, less <ll>, rb_tree_tag, tree_order_statistics_node_update> #pragma 03 using namespace std; using namespace __gnu_pbds; queue <ll> rs[100005], ls[100005]; ll st[800005]; bool marked[200005]; void update(ll root, ll l, ll r, ll i, ll val){ if (i < l || i > r) return; if (l == r){ st[root] = val; return; } ll mid = (l + r) / 2; update(root * 2 + 1, l, mid, i, val); update(root * 2 + 2, mid + 1, r, i, val); st[root] = st[root * 2 + 1] + st[root * 2 + 2]; } ll query(ll root, ll l, ll r, ll x, ll y){ if (y < l || x > r) return 0; if (x <= l && y >= r) return st[root]; ll mid = (l + r) / 2; return query(root * 2 + 1, l, mid, x, y) + query(root * 2 + 2, mid + 1, r, x, y); } ll count_swaps(vector <int> a){ for (ll i = 0; i < a.size(); i++){ if (a[i] < 0) ls[-a[i]].push(i); else rs[a[i]].push(i); } ll ans = 0; ll n = a.size(); for (ll i = 0; i < a.size(); i++) update(0, 0, n - 1, i, 1); for (ll i = 0; i < a.size(); i++){ if (marked[i]) continue; marked[i] = 1; if (a[i] < 0){ ls[-a[i]].pop(); ll p = rs[-a[i]].front(); rs[-a[i]].pop(); if (i + 1 <= p - 1) ans += query(0, 0, n - 1, i + 1, p - 1); update(0, 0, n - 1, i, 0); update(0, 0, n - 1, p, 0); marked[p] = 1; } else{ rs[a[i]].pop(); ll p = ls[a[i]].front(); ls[a[i]].pop(); if (i + 1 <= p - 1) ans += query(0, 0, n - 1, i + 1, p - 1); ans++; update(0, 0, n - 1, i, 0); update(0, 0, n - 1, p, 0); marked[p] = 1; } } return ans; }

Compilation message (stderr)

shoes.cpp:30:0: warning: ignoring #pragma 03  [-Wunknown-pragmas]
                 #pragma 03
 
shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:53:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                  for (ll i = 0; i < a.size(); i++){
                                 ~~^~~~~~~~~~
shoes.cpp:59:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                  for (ll i = 0; i < a.size(); i++) update(0, 0, n - 1, i, 1);
                                 ~~^~~~~~~~~~
shoes.cpp:60:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                  for (ll i = 0; i < a.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...