/*
分析:
水~ - -
用了次快排,由高到低开始往两侧扫描,如果这个
当前的这个高度只出现了这一次,那么对于这个高度就
不用扫描了。
2012-08-17
*/
分析:
水~ - -
用了次快排,由高到低开始往两侧扫描,如果这个
当前的这个高度只出现了这一次,那么对于这个高度就
不用扫描了。
2012-08-17
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
struct A
{
int h;
int flag;
}ori[100011];
struct B
{
int h;
int num;
}now[100011];
int cmp(const void *a,const void *b)
{
struct B *c,*d;
c=(struct B *)a;
d=(struct B *)b;
return d->h-c->h;
}
int main()
{
int Case=1;
int n;
int i,l;
int t;
int ans;
while(scanf("%d",&n)!=-1)
{
for(i=0;i<n;i++)
{
scanf("%d",&ori[i].h);
ori[i].flag=1;
now[i].h=ori[i].h;
now[i].num=i;
}
qsort(now,n,sizeof(now[0]),cmp);
ans=0;
t=n-1;
for(i=0;i<t;i++)
{
if(now[i].h==0) break;
if(ori[now[i].num].flag==0) continue;
ans++;
ori[now[i].num].flag=0;
if(now[i+1].h!=now[i].h) continue;
for(l=now[i].num-1;l>=0;l--)
{
if(ori[l].h<now[i].h) break;
if(ori[l].h==now[i].h) ori[l].flag=0;
}
for(l=now[i].num+1;l<n;l++)
{
if(ori[l].h<now[i].h) break;
if(ori[l].h==now[i].h) ori[l].flag=0;
}
}
if(ori[now[n-1].num].flag && now[n-1].h) ans++;
printf("Case %d: %d\n",Case++,ans);
}
return 0;
}