Problem
如果一组数据左边的一个比自己高,右边的一个比这俩都高,则这组数据合法,问有多少组合法数据。
Solution
维护单调上升序列,每次加入元素前的删除元素记录所删除的最后一个值,每次删之前拿新元素和这个值比较,如果新元素大则这组数据合法。
#include <bits/stdc++.h>
using namespace std;
int k,n,h[300005],pos,que[300005],ac[1005],num,tmp;
int main()
{
cin>>k;
for(int i=1;i<=k;i++)
{
scanf("%d",&n);
bool ans=0;
pos=0;
tmp=(1e9)+1;
for(int j=1;j<=n;j++)
{
scanf("%d",&h[j]);
while(pos&&que[pos]>=h[j])
tmp=que[pos--];
if(h[j]>tmp) ans=1;
que[++pos] = h[j];
}
if(ans)
ac[++num]=i;
}
cout<<num<<endl;
for(int i=1;i<=num;i++)
cout<<ac[i]<<endl;
return 0;
}