#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
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
241 ms |
1016 KB |
Output is correct |
2 |
Correct |
856 ms |
1272 KB |
Output is correct |
3 |
Execution timed out |
9057 ms |
1144 KB |
Time limit exceeded |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
241 ms |
1016 KB |
Output is correct |
2 |
Correct |
856 ms |
1272 KB |
Output is correct |
3 |
Execution timed out |
9057 ms |
1144 KB |
Time limit exceeded |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
9057 ms |
1656 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
241 ms |
1016 KB |
Output is correct |
2 |
Correct |
856 ms |
1272 KB |
Output is correct |
3 |
Execution timed out |
9057 ms |
1144 KB |
Time limit exceeded |
4 |
Halted |
0 ms |
0 KB |
- |