Submission #151669

#TimeUsernameProblemLanguageResultExecution timeMemory
151669ae04071Arranging Shoes (IOI19_shoes)C++14
100 / 100
530 ms22912 KiB
#include <bits/stdc++.h> #define fi first #define se second using namespace std; using lli = long long; using pii = pair<int,int>; int n; struct seg_tr{ int tr[200001]; void init() { for(int i=0;i<=n;i++) tr[i] = 0; } void upd(int cur, int val) { while(cur<=n) tr[cur]+=val, cur+=cur&-cur; } int get(int cur) { int ret=0; while(cur) ret+=tr[cur], cur-=cur&-cur; return ret; } }seg; long long count_swaps(vector<int> s) { set<pii> vi, iv; n = s.size(); seg.init(); for(int i=0;i<s.size();i++) { vi.insert({s[i], i}); iv.insert({i, s[i]}); seg.upd(i+1, 1); } lli ans = 0; int n=s.size() / 2; for(int i=0;i<n;i++) { auto st = iv.begin(); auto mat = vi.lower_bound({-st->se, 0}); ans += seg.get(mat->se); if(st->se < 0) ans--; seg.upd(st->fi+1, -1); seg.upd(mat->se+1, -1); iv.erase({mat->se, -st->se}); vi.erase(mat); vi.erase({st->se, st->fi}); iv.erase(st); } return ans; }

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:27:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     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...