fork download
  1. #include<stdio.h>
  2. #include<vector>
  3. using namespace std;
  4. int min(int a, int b) { if (a == 0)return b; if (a < b)return a; return b; }
  5. int max(int a, int b) { if (a == 0)return b; if (a < b)return b; return a; }
  6. struct xy { int x, y; }G[121212], L[121212];
  7. int S[121212], E[121212];
  8. vector<int>ST;
  9. int main() {
  10. int n, i, x, ln;
  11. scanf("%d", &n);
  12. for (i = 1; i <= n; i++) {
  13. scanf("%d", &x);
  14. G[x].x = min(G[x].x, i);
  15. G[x].y = max(G[x].y, i);
  16. }
  17. for (i = 1; i <= n; i++) if(G[i].x)S[G[i].x] = i, E[G[i].y] = i;
  18. int ans = 0;
  19. for (i = 1; i <= n; i++) {
  20. if (S[i]) ST.push_back(S[i]);
  21. if (E[i]) {
  22. if (ST.back() != E[i]) { printf("-1"); return 0; }
  23. ans = max(ST.size(), ans);
  24. ST.pop_back();
  25. }
  26. }
  27. printf("%d", ans);
  28. return 0;
  29. }
Success #stdin #stdout 0s 4368KB
stdin
7
0
1
4
5
1
3
3
stdout
2