// O O O O O O O O O O O O O O O OO O OO O OO O O O TTCH O TTTCH O TTTCH O O O O
#pragma GCC optimize("Ofast")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,popcnt,abm,mmx")
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <stdio.h>
#include <cstdio>
#include <math.h>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
#include <deque>
#include <random>
#include <iomanip>
#include <bitset>
#include <cassert>
// #include "grader.h"
using namespace std;
#define y1 y11
#define double long double
#define less less228
#define left left228
#define right right228
#define list list228
template<typename T> void uin(T &a, T b) {
if (b < a) a = b;
}
template<typename T> void uax(T &a, T b) {
if (b > a) a = b;
}
const int N = 150 * 1000 + 228;
const int K = 350;
int n, L;
int x[N], num[N];
int max_block;
vector<int> b[N];
int jump[N], right[N];
void build(int block) {
int sz = (int)b[block].size();
for (int i = sz - 1; i + 1; --i) {
int l = i, r = sz;
while (r - l > 1) {
int m = (l + r) >> 1;
if (x[b[block][m]] <= x[b[block][i]] + L) {
l = m;
} else {
r = m;
}
}
jump[b[block][i]] = sz - 1;
if (l == sz - 1) {
right[b[block][i]] = x[b[block][i]] + L;
jump[b[block][i]] = 1;
} else {
right[b[block][i]] = right[b[block][l + 1]];
jump[b[block][i]] = jump[b[block][l + 1]] + 1;
}
}
}
void rebuild() {
vector<int> indices;
for (int i = 0; i <= max_block; ++i) {
for (int j : b[i]) {
indices.emplace_back(j);
}
b[i].clear();
}
for (int i = 0; i < n; ++i) {
b[i / K].push_back(indices[i]);
num[indices[i]] = i / K;
}
for (int i = 0; i <= max_block; ++i) {
build(i);
}
}
int get_answer() {
int block = 0;
while (b[block].empty()) ++block;
int ind = 0;
int answer = 0;
while (1) {
int i = b[block][ind];
answer += jump[i];
if (block == max_block) break;
bool caught = 0;
for (int bl = block + 1; bl <= max_block; ++bl) {
if (b[bl].empty()) continue;
if (x[b[bl].back()] <= right[i]) continue;
caught = 1;
int l = -1, r = (int)b[bl].size() - 1;
while (r - l > 1) {
int m = (l + r) >> 1;
if (x[b[bl][m]] <= right[i]) {
l = m;
} else {
r = m;
}
}
block = bl;
ind = r;
break;
}
if (!caught) break;
}
return answer;
}
int update(int id, int nv) {
for (int i = 0; i < (int)b[num[id]].size(); ++i) {
if (b[num[id]][i] == id) {
b[num[id]].erase(b[num[id]].begin() + i);
}
}
build(num[id]);
x[id] = nv;
int block = 0;
for (int i = 0; i <= max_block; ++i) {
if (!b[i].empty() && x[b[i][0]] <= x[id]) block = i;
}
b[block].push_back(id);
num[id] = block;
int pos = (int)b[block].size() - 1;
while (pos && x[b[block][pos]] < x[b[block][pos - 1]]) {
swap(b[block][pos], b[block][pos - 1]);
--pos;
}
if (b[block].size() > 3 * K) {
rebuild();
} else {
build(block);
}
// cout << "id=" << id << " nv=" << nv << endl;
// for (int i = 0; i <= max_block; ++i) {
// cout << "b[" << i << "] :\n";
// for (int j : b[i]) {
// cout << "(" << j << ", x=" << x[j] << ", jump=" << jump[j] << " right=" << right[j] << ")\n";
// }
// }
return get_answer();
}
void init(int nnnn, int llll, int xs[]) {
n = nnnn;
L = llll;
for (int i = 0; i < n; ++i) {
x[i] = xs[i];
b[i / K].push_back(i);
num[i] = i / K;
}
max_block = (n - 1) / K;
for (int i = 0; i <= max_block; ++i) {
build(i);
}
return;
}
// int xx[100];
// signed main() {
// int q;
// cin >> n >> L >> q;
// for (int i = 0; i < n; ++i) {
// cin >> xx[i];
// }
// init(n, L, xx);
// while(q--) {
// int i, j;
// cin >> i >> j;
// cout << update(i, j) << '\n';
// }
// return 0;
// }
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
3960 KB |
Output is correct |
2 |
Correct |
8 ms |
3960 KB |
Output is correct |
3 |
Correct |
9 ms |
3960 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
3960 KB |
Output is correct |
2 |
Correct |
8 ms |
3960 KB |
Output is correct |
3 |
Correct |
9 ms |
3960 KB |
Output is correct |
4 |
Correct |
9 ms |
3960 KB |
Output is correct |
5 |
Correct |
9 ms |
3832 KB |
Output is correct |
6 |
Correct |
7 ms |
3832 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
3960 KB |
Output is correct |
2 |
Correct |
8 ms |
3960 KB |
Output is correct |
3 |
Correct |
9 ms |
3960 KB |
Output is correct |
4 |
Correct |
9 ms |
3960 KB |
Output is correct |
5 |
Correct |
9 ms |
3832 KB |
Output is correct |
6 |
Correct |
7 ms |
3832 KB |
Output is correct |
7 |
Correct |
1576 ms |
4856 KB |
Output is correct |
8 |
Correct |
1706 ms |
4984 KB |
Output is correct |
9 |
Correct |
1947 ms |
5792 KB |
Output is correct |
10 |
Correct |
2817 ms |
6572 KB |
Output is correct |
11 |
Correct |
2558 ms |
6436 KB |
Output is correct |
12 |
Correct |
3154 ms |
6252 KB |
Output is correct |
13 |
Correct |
2842 ms |
6408 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
3960 KB |
Output is correct |
2 |
Correct |
8 ms |
3960 KB |
Output is correct |
3 |
Correct |
9 ms |
3960 KB |
Output is correct |
4 |
Correct |
9 ms |
3960 KB |
Output is correct |
5 |
Correct |
9 ms |
3832 KB |
Output is correct |
6 |
Correct |
7 ms |
3832 KB |
Output is correct |
7 |
Correct |
1576 ms |
4856 KB |
Output is correct |
8 |
Correct |
1706 ms |
4984 KB |
Output is correct |
9 |
Correct |
1947 ms |
5792 KB |
Output is correct |
10 |
Correct |
2817 ms |
6572 KB |
Output is correct |
11 |
Correct |
2558 ms |
6436 KB |
Output is correct |
12 |
Correct |
3154 ms |
6252 KB |
Output is correct |
13 |
Correct |
2842 ms |
6408 KB |
Output is correct |
14 |
Correct |
2969 ms |
5620 KB |
Output is correct |
15 |
Correct |
2722 ms |
5348 KB |
Output is correct |
16 |
Correct |
3382 ms |
6032 KB |
Output is correct |
17 |
Correct |
4758 ms |
7368 KB |
Output is correct |
18 |
Correct |
4876 ms |
7376 KB |
Output is correct |
19 |
Correct |
4753 ms |
7468 KB |
Output is correct |
20 |
Correct |
4451 ms |
7356 KB |
Output is correct |
21 |
Correct |
5212 ms |
7484 KB |
Output is correct |
22 |
Correct |
4871 ms |
7528 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
3960 KB |
Output is correct |
2 |
Correct |
8 ms |
3960 KB |
Output is correct |
3 |
Correct |
9 ms |
3960 KB |
Output is correct |
4 |
Correct |
9 ms |
3960 KB |
Output is correct |
5 |
Correct |
9 ms |
3832 KB |
Output is correct |
6 |
Correct |
7 ms |
3832 KB |
Output is correct |
7 |
Correct |
1576 ms |
4856 KB |
Output is correct |
8 |
Correct |
1706 ms |
4984 KB |
Output is correct |
9 |
Correct |
1947 ms |
5792 KB |
Output is correct |
10 |
Correct |
2817 ms |
6572 KB |
Output is correct |
11 |
Correct |
2558 ms |
6436 KB |
Output is correct |
12 |
Correct |
3154 ms |
6252 KB |
Output is correct |
13 |
Correct |
2842 ms |
6408 KB |
Output is correct |
14 |
Correct |
2969 ms |
5620 KB |
Output is correct |
15 |
Correct |
2722 ms |
5348 KB |
Output is correct |
16 |
Correct |
3382 ms |
6032 KB |
Output is correct |
17 |
Correct |
4758 ms |
7368 KB |
Output is correct |
18 |
Correct |
4876 ms |
7376 KB |
Output is correct |
19 |
Correct |
4753 ms |
7468 KB |
Output is correct |
20 |
Correct |
4451 ms |
7356 KB |
Output is correct |
21 |
Correct |
5212 ms |
7484 KB |
Output is correct |
22 |
Correct |
4871 ms |
7528 KB |
Output is correct |
23 |
Execution timed out |
9011 ms |
9464 KB |
Time limit exceeded |
24 |
Halted |
0 ms |
0 KB |
- |