제출 #203679

#제출 시각아이디문제언어결과실행 시간메모리
203679joulejBubble Sort 2 (JOI18_bubblesort2)C++17
0 / 100
9057 ms1656 KiB
#include <iostream> #include <iomanip> #include <random> #include <algorithm> #include <vector> #include <set> #include <map> #include <cmath> #include <numeric> #include <cstdlib> #include <cstring> #include <deque> #include <sstream> #include <bitset> #include <cassert> #include <fstream> #include <queue> #define len(X) ((int)(X).size()) #ifdef __LOCAL #define DEBUG_OUTPUT_ENABLED 1 #define DBG(X) dout << #X << "=" << (X) << '\n'; #define SAY(X) dout << (X) << '\n'; #else #define DEBUG_OUTPUT_ENABLED 0 #define DBG(X) 42; #define SAY(X) 42; #endif #define dout debug::instance using namespace std; template<typename T, typename S> inline ostream& operator<<(ostream& os, const pair<T, S> p) { cout << "[" << p.first << ";" << p.second << "]"; return os; } template<typename T> inline ostream& operator<<(ostream& os, const vector<T>& v) { for(auto el: v) cout << el << " "; return os; } namespace debug { struct DebugStream { private: bool is_first; public: DebugStream(bool _is_first): is_first(_is_first) {} template<typename T> DebugStream operator<<(const T& value) const { assert(DEBUG_OUTPUT_ENABLED); if(is_first) cout << "[DBG] "; cout << value; return DebugStream(false); }; template<typename T> DebugStream printArray(T* l, T* r) { assert(DEBUG_OUTPUT_ENABLED); if(is_first) cout << "[DBG] "; while(l != r) { cout << (*l); ++l; if(l == r) { cout << '\n'; } else { cout << ' '; } } return DebugStream(false); } }; DebugStream instance(true); }; using ll = long long int; using ull = unsigned long long int; using ld = long double; using pii = pair<int, int>; using pll = pair<ll, ll>; const int INT_INF = (int)(2e9); const ll LL_INF = (ll)(2e18); const int NIL = -1; static mt19937 _g(time(nullptr)); inline ll randint(ll a, ll b) { ll w = (_g() << 31LL) ^ _g(); return a + w % (b - a + 1); } inline void fast_io() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); }; template<typename T> inline T sign(T x) { return T(x > 0) - T(x < 0); } template<typename T> inline T fetch() { T ret; cin >> ret; return ret; } template<typename T> inline vector<T> fetch_vec(int sz) { vector<T> ret(sz); for(auto& elem: ret) cin >> elem; return ret; } const int MAXN = 8000 + 7; const int T = sqrt(MAXN); set<int> pos[MAXN], posB[MAXN]; inline int getMn(set<int>& v) { return *(v.begin()); } inline int getMx(set<int>& v) { return *(prev(v.end())); } int modelSort(vector<int> A) { int rez = 0, ch = 1; while(ch) { ch = 0; for(int i = 0; i < len(A) - 1; ++i) { if(A[i] > A[i + 1]) { swap(A[i + 1], A[i]); ch = 1; } } rez += ch; } return rez; } vector<int> countScans(vector<int> A, vector<int> X, vector<int> V) { int n = len(A); int q = len(X); vector<int> ord; ord.reserve(n + q); for(auto& el: A) ord.emplace_back(el); for(auto& el: V) ord.emplace_back(el); sort(ord.begin(), ord.end()); ord.erase(unique(ord.begin(), ord.end()), ord.end()); for(auto& el: A) el = lower_bound(ord.begin(), ord.end(), el) - ord.begin(); for(auto& el: V) el = lower_bound(ord.begin(), ord.end(), el) - ord.begin(); vector<int> answ(q, NIL); /*for(int i = 0; i < n; ++i) { int v = A[i]; pos[v].insert(i); posB[v / T].insert(i); }*/ for(int i = 0; i < q; ++i) { int j = X[i]; //pos[A[j]].erase(j); //posB[A[j] / T].erase(j); A[j] = V[i]; //pos[A[j]].insert(j); //posB[A[j] / T].insert(j); answ[i] = modelSort(A); /*int mn = INT_INF/2; for(int v = MAXN - 1; v >= 0; --v) { if(!pos[v].empty()) { answ[i] = max(answ[i], getMx(pos[v]) - mn); mn = min(mn, getMn(pos[v])); } }*/ } return answ; } #ifdef __LOCAL int main() { fast_io(); int n = fetch<int>(); int q = fetch<int>(); auto A = fetch_vec<int>(n); auto X = fetch_vec<int>(q); auto V = fetch_vec<int>(q); cout << countScans(A, X, V) << '\n'; return 0; } #endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...