Pagini recente » Cod sursa (job #1328897) | Cod sursa (job #3241694) | Cod sursa (job #1866547) | Cod sursa (job #2362671) | Cod sursa (job #2533739)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("compact.in");
ofstream out("compact.out");
int v[1000000],m[1000000], M[1000000];
int vf1,vf2,n,cnt;
int main()
{
in>>n;
int i;
for(i=1;i<=n;i++)
{
in>>v[i];
while(v[i]<v[m[vf1]] && vf1>0)
{
vf1--;
}
while(v[i]>v[M[vf2]] && vf2>0)
{
vf2--;
}
vf1++;
m[vf1]=i;
vf2++;
M[vf2]=i;
if(vf1>1)
{
int st=1,dr=vf1-1,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(m[mij]<=M[vf2-1])
{
st=mij+1;
}
else
dr=mij-1;
}
cnt+=vf1-st;
if(vf1>st && m[vf1-1]==i-1)
{
cnt--;
}
}
}
out<<cnt<<endl;
/*for(i=1;i<=vf1;i++)
cout<<m[i].nr<<" ";
cout<<endl;
{1}
for(i=1;i<=vf2;i++)
cout<<M[i].nr<<" ";
*/
return 0;
}