解题报告:这道题目是真的。。。一言难尽,以为很难,结果他这个p[i]指的是数i在排列中的位置,那就跟着它模拟就行了,然后判断是否有一个数比他大并且没用过,如果有就break输出no,如果没有就把当前的数***去。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<vector>
#include<queue>
#include<set>
#define IL inline
#define x first
#define y second
typedef long long ll;
using namespace std;
const int N=200010;
int a[N];
int main()
{
int t;
cin>>t;
while(t--)
{
set<int>s;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int pos;
cin>>pos;
a[pos]=i;
}
s.insert(a[1]);
bool flag=true;
for(int i=2;i<=n;i++)
{
if(!s.count(a[i-1]+1) && a[i-1]<n && a[i]!= a[i-1]+1 )
{
flag=0;
break;
}
else
{
s.insert(a[i]);
}
}
if (flag ) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}