题目: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;
}

本文深入解析了一段用于算法竞赛的代码,该代码通过使用堆栈、排序和二分查找等数据结构和算法来解决特定的问题。文章详细介绍了代码的逻辑流程,包括变量初始化、输入处理、关键算法实现以及输出结果的生成。
155

被折叠的 条评论
为什么被折叠?



