제출 #1139825

#제출 시각아이디문제언어결과실행 시간메모리
1139825SmuggingSpunBubble Sort 2 (JOI18_bubblesort2)C++20
60 / 100
7806 ms4164 KiB
#include "bubblesort2.h" #include<bits/stdc++.h> using namespace std; template<class T>void maximize(T& a, T b){ if(a < b){ a = b; } } vector<int>countScans(vector<int>a, vector<int>x, vector<int>v){ int n = a.size(), q = x.size(); vector<int>ans(q, 0); if(n <= 2000 && q <= 2000){ for(int _i = 0; _i < q; _i++){ a[x[_i]] = v[_i]; vector<int>A = a; while(true){ bool swapped = false; for(int i = 1; i < n; i++){ if(A[i - 1] > A[i]){ swap(A[i - 1], A[i]); swapped = true; } } if(!swapped){ break; } ans[_i]++; } } } else if(n <= 8000 && q <= 8000){ vector<int>p(n); iota(p.begin(), p.end(), 0); for(int _i = 0; _i < q; _i++){ a[x[_i]] = v[_i]; sort(p.begin(), p.end(), [&] (int i, int j) -> bool{ return a[i] < a[j] || (a[i] == a[j] && i < j); }); for(int i = 0; i < n; i++){ maximize(ans[_i], p[i] - i); } } } else if(n <= 50000 && q <= 50000 && *max_element(a.begin(), a.end()) <= 100 && *max_element(v.begin(), v.end()) <= 100){ vector<set<int>>pos(101); for(int i = 0; i < n; i++){ pos[a[i]].insert(i); } for(int _i = 0; _i < q; _i++){ pos[a[x[_i]]].erase(x[_i]); pos[a[x[_i]] = v[_i]].insert(x[_i]); for(int i = 1, cnt = 0; i < 101; i++){ if(!pos[i].empty()){ maximize(ans[_i], *pos[i].rbegin() - (cnt += pos[i].size()) + 1); } } } } else{ } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...