codeforces -------学生の輪



Codeforces Circle Students



タイトル説明

n人の生徒が順番に輪になって立っています。 i番目の学生のインデックスは円周率です。学生のすべてのインデックスが1からnまでの異なる整数であることが保証されています(つまり、それらは順列を形成します)。
生徒たちはラウンドダンスを始めたいと思っています。生徒2が生徒1の直後に時計回りに来る場合(間に生徒がいない場合)、生徒3が生徒2の直後に時計回りに来る場合など、時計回りのラウンドダンスを開始できます。学生n-1の直後に時計回りに来る。反時計回りのラウンドダンスはほとんど同じです。唯一の違いは、学生iが反時計回りの順序で学生i-1の直後にある必要があることです(この条件は、2からnまでのすべてのiで満たされる必要があります)。

たとえば、時計回りにリストされている生徒のインデックスが[2,3,4,5,1]の場合、時計回りのラウンドダンスを開始できます。生徒が時計回りにインデックス[3,2,1,4]を持っている場合、反時計回りのラウンドダンスを開始できます。



あなたの仕事は、ラウンドダンスを始めることが可能かどうかを判断することです。生徒はダンスを始める前に自分の位置を変えることはできず、サークルを入れ替えたり離れたりすることはできません。また、他の生徒はサークルに入ることができません。

q個の独立したクエリに答える必要があります。



入力

入力の最初の行には、1つの整数q(1≤q≤200)、つまりクエリの数が含まれています。次に、qクエリが続きます。

クエリの最初の行には、1つの整数n(1≤n≤200)(学生の数)が含まれています。

クエリの2行目には、インデックスp1、p2、…、pn(1≤pi≤n)の順列が含まれています。ここで、piはi番目の学生のインデックス(時計回りの順序)です。すべての円周率が1からnまでの別個の整数であることが保証されます(つまり、それらは順列を形成します)。



出力

クエリごとに、回答を印刷します。所定の順番でラウンドダンスを始めることができる場合は、「はい」と印刷してください。それ以外の場合は「NO」と印刷します。

サンプル入力

5 4 1 2 3 4 3 1 3 2 5 1 2 3 5 4 1 1 5 3 2 1 5 4

サンプル出力

YES YES NO YES YES

一連のリング型連続成長かどうかの判断
C ++コード

#include using namespace std const int Maxn = 205 int q int n int a[Maxn] int main() { scanf('%d', &q) while (q--) { scanf('%d', &n) for (int i = 0 i