-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathE.cpp
More file actions
61 lines (56 loc) · 1.37 KB
/
E.cpp
File metadata and controls
61 lines (56 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "bits/stdc++.h"
using namespace std;
const int N = 2e5 + 1;
int seg[N], lazy[N];
void push(int v) {
seg[v * 2] += lazy[v];
seg[v * 2 + 1] += lazy[v];
lazy[v * 2] += lazy[v];
lazy[v * 2 + 1] += lazy[v];
lazy[v] = 0;
}
void update(int v, int tl, int tr, int l, int r) {
if (l > r)return;
if (l == tl and r == tr)
lazy[v] += 1, lazy[v] += 1;
else {
push(v);
int tm = (tl + tr) / 2;
update(v * 2, tl, tm, l, min(r, tm));
update(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
}
}
int query(int v, int tl, int tr, int pos) {
if (tl == tr)
return seg[v];
else {
push(v);
int tm = (tl + tr) / 2;
if (pos <= tm) {
return (query(v * 2, tl, tm, pos));
} else {
return (query(v * 2 + 1, tm + 1, tr, pos));
}
}
}
signed main() {
int n;
cin >> n;
map<int, int> mp;
vector<int> v(n);
for (auto &i: v)
cin >> i;
for (int i = 0; i < n; i++)
mp[v[i]] = i;
int maximum_area = 0;
int covered_area = 0;
int ans = 0;
for (int i = 0; i < n; i++) {
maximum_area = max(maximum_area, mp[v[i]]);
if (covered_area > i)
ans++;
else
covered_area = maximum_area;
}
cout << ans << endl;
}