제출 #591006

#제출 시각아이디문제언어결과실행 시간메모리
591006almothana05Arranging Shoes (IOI19_shoes)C++14
100 / 100
469 ms29112 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; map<int , vector<int> >num; vector<pair<int , int> >erg; int vis[200000] , pref[200000], seg[800000], lazy[800000]; void pro(int id , int l , int r){ seg[id] += lazy[id]; if(l != r){ lazy[id * 2] += lazy[id]; lazy[id * 2 + 1] += lazy[id]; } lazy[id] = 0; } int up(int id , int l , int r, int gewl , int gewr , int gew){ if(gewr < gewl){ return 0; } pro(id , l , r); if(l > gewr || gewl > r){ return 0; } else if(gewl <= l && r <= gewr){ // cout << l << ' ' << r <<' ' << id << "\n"; seg[id] += gew; if(l != r){ lazy[id * 2] += gew; lazy[id * 2 + 1] += gew; } return gew; } int m = (l + r)/2 , cmp; cmp = up(id * 2 , l , m , gewl , gewr , gew) | up(id * 2 + 1 , m + 1 , r , gewl , gewr , gew); seg[id] += cmp; return cmp; } long long count_swaps(vector<int> s) { long long menge = s.size() , be , en , re = 0 , len; for(len = 1 ; len < menge ; len *= 2); for(int i = menge - 1 ; i >= 0 ; i--){ num[s[i]].push_back(i); } for(int i = 0 ; i < menge ; i++){ if(vis[i] == 1){ continue; } be = i; en = num[s[i] * -1][num[s[i] * -1].size() - 1]; num[s[i] * -1].pop_back(); num[s[i]].pop_back(); // if(be > en){ // swap(be , en); // } up(1 , 1 , len , be + 2 , en , 1); up(1 , 1 , len , be + 1 , be + 1 , 0); up(1 , 1 , len , en + 1 , en + 1, 0); vis[be] = 1; vis[en] = 1; // cout << be << ' ' << en << "\n\n"; be += seg[be + len]; en += seg[en + len]; // cout << be << ' ' << en << "\n\n"; if(s[i] > 0){ re++; } re += (en - be - 1); } return re; }
#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...