#include <bits/stdc++.h>
#define endl '\n'
typedef long long ll;
using namespace std;
const ll MAXN = 1e7 + 7;
ll a[MAXN], m[MAXN];
void sol() {
ll n, ans = 0;
cin >> n;
for (ll i = 1; i <= n; i++) {
cin >> a[i];
}
/*
Ý tưởng của bài này là:
Biến ans: Là tổng phi tiêu anh cần mua
Anh có mảng là m[] với
m[i] là số phi tiêu đang ở độ cao thứ i
Em sẽ duyệt for từng trái bóng một.
Trường hợp 1: Nếu quả bóng thứ i có m[i] > 0 có nghĩa là hiện tại ở vị trí thứ i
đang có phi tiêu. => có thể phá vỡ quả bóng đó mà không cần mua thêm phi tiêu => sau
khi quả bóng đó vỡ thì m[i] = 0 vì phi tiêu sẽ hạ độ cao nên m[i - 1]++;
Trường hơp 2: Nếu quả bóng thứ i có m[i] = 0 có nghĩa là hiện tại ở vị trí thứ i
đang không có phi tiêu. => để phá vỡ thì phải mua 1 phi tiêu nên ans++ là mua thêm 1 phi tiêu
sau khi phi tiêu đó làm vỡ quả bóng thứ i thì hạ độ cao nên m[i - 1]++;
Kết quả cuối cùng là ans rồi in ra thôi
*/
for (ll i = 1; i <= n; i++) {
if (m[a[i]] == 0) {
m[a[i] - 1]++;
ans++;
} else {
m[a[i]]--;
m[a[i] - 1]++;
}
}
cout << ans << endl;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//freopen("DART.INP", "r", stdin);
//freopen("DART.OUT", "w", stdout);
ll t = 1;
//cin >> t;
while (t--) {
sol();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgZW5kbCAnXG4nCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgbGwgTUFYTiA9IDFlNyArIDc7CmxsIGFbTUFYTl0sIG1bTUFYTl07Cgp2b2lkIHNvbCgpIHsKICAgIGxsIG4sIGFucyA9IDA7CiAgICBjaW4gPj4gbjsKICAgIGZvciAobGwgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICB9CiAgICAKICAgIC8qCiAgICDDnSB0xrDhu59uZyBj4bunYSBiw6BpIG7DoHkgbMOgOgogICAgQmnhur9uIGFuczogTMOgIHThu5VuZyBwaGkgdGnDqnUgYW5oIGPhuqduIG11YQogICAgQW5oIGPDsyBt4bqjbmcgbMOgIG1bXSB24bubaQogICAgbVtpXSBsw6Agc+G7kSBwaGkgdGnDqnUgxJFhbmcg4bufIMSR4buZIGNhbyB0aOG7qSBpCiAgICBFbSBz4bq9IGR1eeG7h3QgZm9yIHThu6tuZyB0csOhaSBiw7NuZyBt4buZdC4KICAgIFRyxrDhu51uZyBo4bujcCAxOiBO4bq/dSBxdeG6oyBiw7NuZyB0aOG7qSBpIGPDsyBtW2ldID4gMCBjw7MgbmdoxKlhIGzDoCBoaeG7h24gdOG6oWkg4bufIHbhu4sgdHLDrSB0aOG7qSBpCiAgICDEkWFuZyBjw7MgcGhpIHRpw6p1LiA9PiBjw7MgdGjhu4MgcGjDoSB24buhIHF14bqjIGLDs25nIMSRw7MgbcOgIGtow7RuZyBj4bqnbiBtdWEgdGjDqm0gcGhpIHRpw6p1ID0+IHNhdQogICAga2hpIHF14bqjIGLDs25nIMSRw7MgduG7oSB0aMOsIG1baV0gPSAwIHbDrCBwaGkgdGnDqnUgc+G6vSBo4bqhIMSR4buZIGNhbyBuw6puIG1baSAtIDFdKys7CiAgICBUcsaw4budbmcgaMahcCAyOiBO4bq/dSBxdeG6oyBiw7NuZyB0aOG7qSBpIGPDsyBtW2ldID0gMCBjw7MgbmdoxKlhIGzDoCBoaeG7h24gdOG6oWkg4bufIHbhu4sgdHLDrSB0aOG7qSBpCiAgICDEkWFuZyBraMO0bmcgY8OzIHBoaSB0acOqdS4gPT4gxJHhu4MgcGjDoSB24buhIHRow6wgcGjhuqNpIG11YSAxIHBoaSB0acOqdSBuw6puIGFucysrIGzDoCBtdWEgdGjDqm0gMSBwaGkgdGnDqnUKICAgIHNhdSBraGkgcGhpIHRpw6p1IMSRw7MgbMOgbSB24buhIHF14bqjIGLDs25nIHRo4bupIGkgdGjDrCBo4bqhIMSR4buZIGNhbyBuw6puIG1baSAtIDFdKys7CiAgICAKICAgIEvhur90IHF14bqjIGN14buRaSBjw7luZyBsw6AgYW5zIHLhu5NpIGluIHJhIHRow7RpCiAgICAqLwogICAgZm9yIChsbCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBpZiAobVthW2ldXSA9PSAwKSB7CiAgICAgICAgICAgIG1bYVtpXSAtIDFdKys7CiAgICAgICAgICAgIGFucysrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1bYVtpXV0tLTsKICAgICAgICAgICAgbVthW2ldIC0gMV0rKzsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8IGFucyA8PCBlbmRsOwp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwoKICAgIC8vZnJlb3BlbigiREFSVC5JTlAiLCAiciIsIHN0ZGluKTsKICAgIC8vZnJlb3BlbigiREFSVC5PVVQiLCAidyIsIHN0ZG91dCk7CgogICAgbGwgdCA9IDE7CiAgICAvL2NpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHNvbCgpOwogICAgfQoKICAgIHJldHVybiAwOwp9