連号区間数-第4回ブルーブリッジカップc/c++B組


タイトル:連番区間数
明ちゃんはここ数日、このような奇妙で面白い問題を考えています.
1~Nのある全配列の中で何個の連番区間がありますか?ここでいう連番区間の定義は、
区間[L,R]内のすべての要素(すなわち、この配列のL番目からR番目の要素)をインクリメントして並べ替えると、R−L+1の長さの「連続」数列が得られる場合、この区間連番区間と呼ぶ.
Nが小さいとき、明ちゃんはすぐに答えを出すことができますが、Nが大きくなると、問題はそんなに簡単ではありません.今、明ちゃんはあなたの助けが必要です.
入力形式:
1行目は正の整数N(1<=N<=50000)であり、全配列の規模を表す.
2行目はN個の異なる数字Pi(1<=Pi<=N)であり、このN個の数字のある全配列を表す.
出力フォーマット:
異なる連番区間の数を表す整数を出力します.
例:
ユーザー入力:
4
3 2 4 1
プログラムの出力:
7
ユーザー入力:
5
3 4 2 5 1
プログラムの出力:
9
説明:
第1の使用例では、7つの連番区間が、それぞれ、[1,1],[1,2],[1,3],[1,3],[1,4],[2,2],[3,3],[4,4]である.
第2の使用例では、9つの連番区間は、それぞれ、[1,1],[1,2],[1,3],[1,4],[1,4],[1,5],[2,2],[3,3],[4,4],[5]である.
生産資源約定:
ピークメモリ消費量<64 M
CPU消費量<5000 ms
要求通りに出力してください.ヘビを描いて印刷しないでください.「入力してください.」と入力します.
すべてのコードを同じソースファイルに配置し、デバッグに合格した後、コピーしてソースコードをコミットします.
注意:main関数は0を返す必要があります
注:ANSI C/ANSI C++標準のみを使用し、コンパイル環境やオペレーティングシステムに依存する特別な関数を呼び出さないでください.
注意:すべての依存する関数は、ソースファイル内のincludeで明確にする必要があります.通常のヘッダファイルは、エンジニアリング設定で省略することはできません.
コミットするときは、目的のコンパイラタイプを選択することに注意してください.
問題解:連番区間[i,j]満足:[i,j]における最大値と最小値の差=j-i;
コード:
#include
#include
int main()
{
    int n,i,j,k,l=0,a[50050];
    scanf("%d",&n);
    for(i=0;ia[k])
                    min1=a[k];
                if(max1