Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("maxp.in");
- ofstream fout("maxp.out");
- int a[200002] , st[200002] , n, stg[200002] , drp[200002] , alt[200002];
- void Construire()
- {
- int i , top , x;
- top = 0;
- a[0] = -1;
- st[0] = 0;
- for(i = 1; i <= n; i++)
- {
- x = a[i];
- while(a[st[top]] < x && top > 0)
- top--;
- stg[i] = i - st[top] - 1;
- st[++top] = i;
- }
- a[n + 1] = -1;
- st[0] = n + 1;
- top = 0;
- for(i = n; i >= 1; i--)
- {
- x = a[i];
- while(a[st[top]] < x && top > 0)
- top--;
- drp[i] = st[top] - i - 1;
- st[++top] = i;
- }
- }
- int main()
- {
- int i , mx , nr , x;
- fin >> n;
- nr = 0;
- for(i = 1; i <= n; i++)
- fin >> a[i];
- Construire();
- mx = -1;
- for(i = 1; i <= n; i++)
- {
- x = (stg[i] + 1) * (drp[i] + 1);
- alt[i] = x;
- if(x > mx)mx = x;
- }
- for(i = 1; i <= n; i++)
- if(alt[i] == mx)nr++;
- fout << mx << "\n" << nr;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement