#include "bubblesort2.h"
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <unordered_map>
#include <queue>
#include <algorithm>
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
using namespace std;
using namespace __gnu_pbds;
#define int __int128
#define fuck __int128
typedef tree<pair<fuck, fuck>, null_type, less<pair<fuck, fuck> >, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
const int lmao = 4001000;
int qwq = 1000003;
struct node {
fuck upd = 0, val = 0;
} st[lmao];
void u(int l, int r, int constl, int constr, int idx, fuck val) {
if(l <= constl && constr <= r) {
st[idx].upd += val;
st[idx].val += val;
return;
}
int mid = (constl + constr) >> 1;
st[2*idx+1].upd += st[idx].upd;
st[2*idx+2].upd += st[idx].upd;
st[2*idx+1].val += st[idx].upd;
st[2*idx+2].val += st[idx].upd;
st[idx].upd = 0;
if(mid < l || r < constl) u(l, r, mid+1, constr, 2*idx+2, val);
else if(constr < l || r < mid+1) u(l, r, constl, mid, 2*idx+1, val);
else {
u(l, r, constl, mid, 2*idx + 1, val);
u(l, r, mid+1, constr, 2*idx + 2, val);
}
st[idx].val = max(st[2*idx+1].val, st[2*idx+2].val);
}
fuck qu(int l, int r, int constl, int constr, int idx) {
if(l <= constl && constr <= r) return st[idx].val;
int mid = (constl + constr) >> 1;
st[2*idx+1].upd += st[idx].upd;
st[2*idx+2].upd += st[idx].upd;
st[2*idx+1].val += st[idx].upd;
st[2*idx+2].val += st[idx].upd;
st[idx].upd = 0;
if(mid < l || r < constl) return qu(l, r, mid+1, constr, 2*idx+2);
else if(constr < l || r < mid+1) return qu(l, r, constl, mid, 2*idx+1);
else {
return max(qu(l, r, constl, mid, 2*idx+1), qu(l, r, mid+1, constr, 2*idx+2));
}
}
void range_add(int l, int r, fuck v) {
u(l, r, 0, qwq, 0, v);
}
fuck query_max(int l, int r) {
return qu(l, r, 0, qwq, 0);
}
const fuck onosan = -1e10;
std::vector<int32_t> countScans(std::vector<int32_t> A,std::vector<int32_t> X,std::vector<int32_t> V){
ordered_set ost;
int N=A.size();
int Q=X.size();
std::vector<int32_t> answer(Q);
set<int> s;
for(int i=0; i<N; i++) {
s.insert(A[i]);
}
for(int i=0; i<Q; i++) s.insert(V[i]);
map<int, int> is;
int nxt = 0;
for(int x: s) {
is[x] = nxt++;
}
for(int i=0; i<N; i++) A[i] = is[A[i]];
for(int i=0; i<Q; i++) V[i] = is[V[i]];
for(int i=0; i<N; i++) ost.insert({A[i], i});
pair<int, int> B[N];
for(int i=0; i<N; i++) {
B[i] = {A[i], i};
}
sort(B, B+N);
multiset<pair<fuck, fuck> > ms[N+Q];
map<fuck, fuck> ono[N+Q];
for(int i=0; i<N; i++) {
ms[B[i].first].insert({B[i].second - i, B[i].second});
ono[B[i].first][B[i].second] = B[i].second - i;
}
for(int i=0; i<N+Q; i++) {
if(ms[i].empty()) {
range_add(i, i, onosan);
}
else {
range_add(i, i, (*ms[i].rbegin()).first);
}
}
for(int i=0; i<Q; i++) {
int x = A[X[i]];
int y = V[i];
if(A[X[i]] == V[i]) {
answer[i] = query_max(0, N+Q - 1);
continue;
}
if(x > y) swap(x, y);
if(x + 1 < y) {
if(A[X[i]] > V[i]) {
range_add(x+1, y-1, -1);
}
else {
range_add(x+1, y-1, 1);
}
}
x = A[X[i]];
y = V[i];
int one = ms[x].size();
ms[x].erase({ono[x][X[i]], X[i]});
int two = ms[x].size();
assert(one != two);
if(ms[x].size()) {
fuck ogname = query_max(x, x);
fuck q = (*ms[x].rbegin()).second;
ost.erase({x, X[i]});
ost.insert({y, X[i]});
range_add(x, x, q - (int)ost.order_of_key({A[q], q}) - ogname);
//cout << "tar " << q - (int)ost.order_of_key({A[q], q}) << "\n";
ost.erase({y, X[i]});
}
else {
// cout << "rip :rofl:\n";
ost.erase({x, X[i]});
fuck ogname = query_max(x, x);
range_add(x, x, onosan - ogname); // res = -1e17
}
ost.insert({y, X[i]});
A[X[i]] = V[i];
ms[y].insert({X[i] - (int)ost.order_of_key({V[i], X[i]}), X[i]});
ono[y][X[i]] = X[i] - (int)ost.order_of_key({V[i], X[i]});
// cout << X[i] << " " << (int)ost.order_of_key({V[i], X[i]}) << " " << X[i] - (int)ost.order_of_key({V[i], X[i]}) << " g\n";
fuck q = (*ms[y].rbegin()).second;
fuck ogname = query_max(V[i], V[i]);
range_add(V[i], V[i], q - (int)ost.order_of_key({A[q], q}) - ogname);
answer[i] = query_max(0, N + Q - 1);
if(answer[i] < 0) answer[i] = 0;
/*
pair<int, int> B[N];
for(int j=0; j<N; j++) B[j] = {A[j], j};
sort(B, B+N);
int expected = 0;
for(int j=0; j<N; j++) expected = max(expected, B[j].second - j);
if(expected != answer[i]) {
cout << "fuck!!\n";
// cout << "query "<<i<<": expected "<<expected<<" found "<<answer[i]<<"\n";
}
// for(int j=0; j<N+Q; j++) cout << (query_max(j, j) < -1e15 ? "q" : to_string(query_max(j, j))) << " ";
// cout << "\n";
*/
}
return answer;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
852 KB |
Output is correct |
2 |
Correct |
6 ms |
1152 KB |
Output is correct |
3 |
Correct |
14 ms |
2260 KB |
Output is correct |
4 |
Correct |
18 ms |
2284 KB |
Output is correct |
5 |
Correct |
13 ms |
2260 KB |
Output is correct |
6 |
Correct |
15 ms |
2260 KB |
Output is correct |
7 |
Correct |
14 ms |
2256 KB |
Output is correct |
8 |
Correct |
12 ms |
2340 KB |
Output is correct |
9 |
Correct |
12 ms |
2260 KB |
Output is correct |
10 |
Correct |
13 ms |
2212 KB |
Output is correct |
11 |
Correct |
14 ms |
2240 KB |
Output is correct |
12 |
Correct |
17 ms |
2228 KB |
Output is correct |
13 |
Correct |
12 ms |
2132 KB |
Output is correct |
14 |
Correct |
13 ms |
2132 KB |
Output is correct |
15 |
Correct |
13 ms |
2132 KB |
Output is correct |
16 |
Correct |
12 ms |
2120 KB |
Output is correct |
17 |
Correct |
12 ms |
2132 KB |
Output is correct |
18 |
Correct |
15 ms |
2132 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
852 KB |
Output is correct |
2 |
Correct |
6 ms |
1152 KB |
Output is correct |
3 |
Correct |
14 ms |
2260 KB |
Output is correct |
4 |
Correct |
18 ms |
2284 KB |
Output is correct |
5 |
Correct |
13 ms |
2260 KB |
Output is correct |
6 |
Correct |
15 ms |
2260 KB |
Output is correct |
7 |
Correct |
14 ms |
2256 KB |
Output is correct |
8 |
Correct |
12 ms |
2340 KB |
Output is correct |
9 |
Correct |
12 ms |
2260 KB |
Output is correct |
10 |
Correct |
13 ms |
2212 KB |
Output is correct |
11 |
Correct |
14 ms |
2240 KB |
Output is correct |
12 |
Correct |
17 ms |
2228 KB |
Output is correct |
13 |
Correct |
12 ms |
2132 KB |
Output is correct |
14 |
Correct |
13 ms |
2132 KB |
Output is correct |
15 |
Correct |
13 ms |
2132 KB |
Output is correct |
16 |
Correct |
12 ms |
2120 KB |
Output is correct |
17 |
Correct |
12 ms |
2132 KB |
Output is correct |
18 |
Correct |
15 ms |
2132 KB |
Output is correct |
19 |
Correct |
55 ms |
7320 KB |
Output is correct |
20 |
Correct |
57 ms |
8228 KB |
Output is correct |
21 |
Correct |
55 ms |
8268 KB |
Output is correct |
22 |
Correct |
57 ms |
8272 KB |
Output is correct |
23 |
Correct |
60 ms |
7784 KB |
Output is correct |
24 |
Correct |
64 ms |
7772 KB |
Output is correct |
25 |
Correct |
68 ms |
7628 KB |
Output is correct |
26 |
Correct |
51 ms |
7512 KB |
Output is correct |
27 |
Correct |
54 ms |
7360 KB |
Output is correct |
28 |
Correct |
51 ms |
7380 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
62 ms |
13224 KB |
Output is correct |
2 |
Correct |
263 ms |
24556 KB |
Output is correct |
3 |
Correct |
501 ms |
35660 KB |
Output is correct |
4 |
Correct |
498 ms |
35844 KB |
Output is correct |
5 |
Correct |
498 ms |
35508 KB |
Output is correct |
6 |
Correct |
495 ms |
35640 KB |
Output is correct |
7 |
Correct |
481 ms |
35380 KB |
Output is correct |
8 |
Incorrect |
523 ms |
35484 KB |
Output isn't correct |
9 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
852 KB |
Output is correct |
2 |
Correct |
6 ms |
1152 KB |
Output is correct |
3 |
Correct |
14 ms |
2260 KB |
Output is correct |
4 |
Correct |
18 ms |
2284 KB |
Output is correct |
5 |
Correct |
13 ms |
2260 KB |
Output is correct |
6 |
Correct |
15 ms |
2260 KB |
Output is correct |
7 |
Correct |
14 ms |
2256 KB |
Output is correct |
8 |
Correct |
12 ms |
2340 KB |
Output is correct |
9 |
Correct |
12 ms |
2260 KB |
Output is correct |
10 |
Correct |
13 ms |
2212 KB |
Output is correct |
11 |
Correct |
14 ms |
2240 KB |
Output is correct |
12 |
Correct |
17 ms |
2228 KB |
Output is correct |
13 |
Correct |
12 ms |
2132 KB |
Output is correct |
14 |
Correct |
13 ms |
2132 KB |
Output is correct |
15 |
Correct |
13 ms |
2132 KB |
Output is correct |
16 |
Correct |
12 ms |
2120 KB |
Output is correct |
17 |
Correct |
12 ms |
2132 KB |
Output is correct |
18 |
Correct |
15 ms |
2132 KB |
Output is correct |
19 |
Correct |
55 ms |
7320 KB |
Output is correct |
20 |
Correct |
57 ms |
8228 KB |
Output is correct |
21 |
Correct |
55 ms |
8268 KB |
Output is correct |
22 |
Correct |
57 ms |
8272 KB |
Output is correct |
23 |
Correct |
60 ms |
7784 KB |
Output is correct |
24 |
Correct |
64 ms |
7772 KB |
Output is correct |
25 |
Correct |
68 ms |
7628 KB |
Output is correct |
26 |
Correct |
51 ms |
7512 KB |
Output is correct |
27 |
Correct |
54 ms |
7360 KB |
Output is correct |
28 |
Correct |
51 ms |
7380 KB |
Output is correct |
29 |
Correct |
62 ms |
13224 KB |
Output is correct |
30 |
Correct |
263 ms |
24556 KB |
Output is correct |
31 |
Correct |
501 ms |
35660 KB |
Output is correct |
32 |
Correct |
498 ms |
35844 KB |
Output is correct |
33 |
Correct |
498 ms |
35508 KB |
Output is correct |
34 |
Correct |
495 ms |
35640 KB |
Output is correct |
35 |
Correct |
481 ms |
35380 KB |
Output is correct |
36 |
Incorrect |
523 ms |
35484 KB |
Output isn't correct |
37 |
Halted |
0 ms |
0 KB |
- |