Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define MAXN 100005
- using namespace std;
- int a[MAXN], n, fst, sec, maxx, minn, maxI, tr, Imaxx, Iminn;
- int main()
- {
- scanf("%d", &n);
- for (int i = 0; i < n; i++)
- scanf("%d", &a[i]);
- fst = 0; // prvi ukljucen u trenutnu sesiju
- sec = 1; // prvi sledeci ukljucen u narednu sesiju
- maxI = 1; // maksimalna validna sesija
- tr = 1; // trenutna duzina sesije
- minn = a[0]; // minimum trenutne sesije
- maxx = a[0]; // maksimum trenutne sesije
- Imaxx = 0; // poslednji indeks u sesiji gde se pojavljuje trenutni minn
- Iminn = 0; // poslednji indeks u sesiji gde se pojavljuje trenutni maxx
- while (sec != n)
- {
- if (a[sec] == minn || (minn == maxx && a[sec] == maxx - 1)) // sledeci koji se treba ubaciti u segment je vrednost minn
- {
- minn = a[sec];
- Iminn = sec;
- tr++;
- sec++;
- if (maxI < tr)
- maxI = tr;
- if (maxx == minn)
- Imaxx = Iminn;
- }
- else
- {
- if (a[sec] == maxx || (minn == maxx && a[sec] == minn + 1)) // sledeci koji se treba ubaciti u segment je vrednost maxx
- {
- maxx = a[sec];
- Imaxx = sec;
- tr++;
- sec++;
- if (maxI < tr)
- maxI = tr;
- if (maxx == minn)
- Iminn = Imaxx;
- }
- else // sledeci koji se treba ubaciti u segment je razliciti i od minn i od maxx
- {
- if (fst == Iminn && minn != maxx) // izbacuje se poslednji minn; minn != maxx
- {
- if (a[sec] == maxx + 1) // ako a[sec] treba da postane novi maxx
- {
- minn = maxx;
- Iminn = Imaxx;
- maxx = a[sec];
- Imaxx = sec;
- sec++;
- fst++;
- }
- else // sledeca sesija ce poceti od sec
- {
- maxx = minn = a[sec];
- Imaxx = Iminn = sec;
- fst = sec;
- sec++;
- tr = 1;
- }
- }
- else
- {
- if (fst == Imaxx && minn != maxx) // izbacuje se poslednji maxx; minn != maxx
- {
- if (a[sec] == minn - 1) // ako a[sec] treba da postane novi minn
- {
- maxx = minn;
- Imaxx = Iminn;
- minn = a[sec];
- Iminn = sec;
- sec++;
- fst++;
- }
- else // sledeca sesija ce poceti od sec
- {
- maxx = minn = a[sec];
- Imaxx = Iminn = sec;
- fst = sec;
- sec++;
- tr = 1;
- }
- }
- else // ( maxx == minn && Imaxx = Iminn == fst ) ili se ne izbacuju ni minn ni maxx --> sledeca sesija pocinje od sec
- {
- maxx = minn = a[sec];
- Imaxx = Iminn = sec;
- fst = sec;
- sec++;
- tr = 1;
- }
- }
- }
- }
- }
- printf("%d\n", maxI);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement