Submission #1309563

#TimeUsernameProblemLanguageResultExecution timeMemory
1309563sanoArranging Shoes (IOI19_shoes)C++20
100 / 100
870 ms37460 KiB
#include <vector> #include "shoes.h" #include <iostream> #define vec vector #define ll long long #define For(i, n) for(int i = 0; i < n; i++) using namespace std; class intervalac{ int n; vec<int> l, r, in; void update(int s){ in[s] = in[s*2] + in[s*2 + 1]; return; } public: intervalac(int vel){ n = 1; while(n < vel) n*= 2; l.resize(2*n); r.resize(2*n); in.resize(2*n, 0); For(i, n){ l[i+n] = r[i+n] = i; } for(int i = n-1; i >= 1; i--){ l[i] = l[i*2]; r[i] = r[i*2 + 1]; } return; } int daj(int a, int b, int s = 1){ if(l[s] > b || r[s] < a) return 0; if(a <= l[s] && r[s] <= b) return in[s]; return daj(a, b, s*2) + daj(a, b, s*2 + 1); } void zmen(int a, int b){ a+=n; in[a] += b; a/=2; while(a){ update(a); a/=2; } return; } }; long long count_swaps(std::vector<int> s) { int n = s.size(); intervalac seg(n); vec<vec<int>> p(2*n), m(2*n); For(i, n){ if(s[i] > 0) p[s[i]].push_back(i); else m[s[i] * (-1)].push_back(i); } int cnt = 0; ll vys = 0; vec<int> d(2*n, -1); For(i, 2*n){ For(j, p[i].size()){ //sparujeme p[i][j] a m[i][j] if(m[i][j] > p[i][j]) vys++; d[max(m[i][j], p[i][j])] = min(m[i][j], p[i][j]); s[p[i][j]] = s[m[i][j]] = cnt; cnt++; } } For(i, s.size()) cerr << s[i] << ' '; cerr << endl; For(i, d.size()) cerr << d[i] << ' '; cerr << endl; For(i, n){ if(d[i] == -1) continue; vys += seg.daj(d[i], i); seg.zmen(i, 1); seg.zmen(d[i], 1); } return vys; }
#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...