题目:http://www.gdfzoj.com/oj/contest/462/problems/1
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
using namespace std;
const int maxS=100000;
int a[maxS+5],c[maxS+5];
stack<int> s;
int n;
int main()
{
int i,j,i1,t,maxc;
freopen("a.txt","r",stdin);
while (scanf("%d",&n)!=EOF)
{
t=0; maxc=0;
memset(a,0,sizeof(a));
memset(c,0,sizeof(c));
while (!s.empty())
s.pop();
for (i=1;i<=n;i++)
{
scanf("%d",&a[i]);
c[i]=a[i];
}
sort(a+1,a+n+1);
for (i=1;a[i]<c[1];i++)
s.push(a[i]);
maxc=i; //maxc在a的下标
for (i=2;i<=n;i++)
{
if (c[i]>a[maxc])
{
i1=lower_bound(a+1,a+n+1,c[i])-a;
for (j=maxc+1;j<i1;j++)
s.push(a[j]);
maxc=i1;
}
else
if (c[i]==s.top())
s.pop();
else
{
t=1; printf("J\n");
break;
}
}
if (t==0)
printf("Y\n");
}
return 0;
}