#include #include #include using namespace std; class ducks { private: int *duckStart; int *duckEnd; vector duckVec; public: int rounds; ducks(int count) : duckVec(count) { duckStart = duckVec.data(); duckEnd = duckStart + count; rounds = 0; } void readDucks() { for (int &a : duckVec) { cin >> a; } } void count() { int *lp = duckStart; int *rp = duckEnd - 1; while (duckEnd - duckStart > 1 && rp >= duckStart && lp < duckEnd) { map lpos; map rpos; lp = duckStart; rp = duckEnd - 1; while (rp >= duckStart && lp < duckEnd) { if (rpos.find(*lp) == rpos.end()) { if (lpos.find(*lp) == lpos.end()) { int val = *lp; lpos.emplace(val, lp); //cout << "found left " << val << endl; } } else { rounds++; duckStart = lp + 1; duckEnd = rpos.find(*lp)->second - 1; break; } if (lpos.find(*rp) == lpos.end()) { if (rpos.find(*rp) == rpos.end()) { int val = *rp; lpos.emplace(val, rp); //cout << "found from right" << val << endl; } } else { rounds++; duckEnd = rp; duckStart = lpos.find(*rp)->second + 1; break; } lp++; rp--; } } } }; int main() { ios::sync_with_stdio(false); int count; while (cin >> count) { ducks d(count); d.readDucks(); d.count(); cout << d.rounds << '\n'; } return 0; }