分析:
題目大意是求出每隻cow能看到的cow的總數的和
轉換爲:
每隻cow能被看到的次數總和
這樣就可以用單調隊列求解了。
對於每隻cow,刪掉隊列中height小於它的值,ans加上此時隊列的長度(就是這隻cow會被看到的次數)。再插入這隻cow的height。如此求解。
注意:ans要用long long (畢竟80000*80000 > INT_MAX)
#include<cstdio>
#define MAXN 80000
int n,h[MAXN+10],que[MAXN+10];
long long ans;
void read()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&h[i]);
}
void workout()
{
int front=0,rear=0;
for(int i=1;i<=n;i++){
while(front<rear){
if(que[rear-1]<=h[i])
rear--;
else
break;
}
ans+=rear-front;
que[rear++]=h[i];
}
printf("%I64d\n",ans);
}
int main()
{
read();
workout();
}