P1638は、展示会を訪問します
タイトル説明
アジアワールドエキスポは、Mの画家が絵を描い世界で最高で出品されています。
そのいくつかのマスターを見に万博を考えるwangjy。
しかし、万博は非常に奇妙なルールは二つの図は、チケットの購入に記載しなければならないということである持っている場合は、
彼はBピクチャを通じてウェブの展示を見てみたかったすべての画像の代表者との間にaとb、(aとbが含まれている)、チケットながら、
価格は1元の絵です。
より多くの先生の絵を表示するには、wangjyは、すべての教師(少なくとも各1)の入院後絵を見たいのですが。
しかし、彼はお金を節約したかったです。。。
wangjy友人として、彼はチケットを買うとき、彼はaとbの値を決めたプログラムを書くことが求められます。
入力形式
最初の行は、画像が何ビット教師によって描かれている画像やエキスポホールの総数を表すN及びMであります
絵。
N個のデジタルを含む後続の行は、それらがビット教師の数を表し、1とMの間です。
出力フォーマット
AおよびB(<= b)は、空白文字で区切られています。
ソリューションを確保するために、複数のソリューション、最小出力Aの場合。
サンプル入力と出力
入力#1
5 12
2 5 3 1 3 2 4 1 5 4 3
出力#1
2 7
説明/ヒント
合意されたデータの30%N <= 200、M <= 20
データN <= 10000、M <= 1000の60%
100%のデータN <= 1000000、M <= 2000
[思考]
ダブルポインタが
起動列挙
蓄積端B(テール・ポインタ)
教師が絵画の各ことがわかるまで
、次いで、記録間隔の長さを比較する
ことは、Bの前に記録された置き換える間隔小さい場合
すべての先生の絵が見られているかどうかを確認する方法は?
バケツでは、
先生の絵が参加した場合、それは彼のバケツに蓄積され
、それが0から1に新しいアーティストに追加されたバレルであれば
カウンタカウント(カウンタが現在可視をカウントするために使用してアーティストの絵画の数)
、それはバケツで1から0に変更された場合は
、アーティストの絵画を見ることが少ない
ので、この時間は、回帰対抗します
[完了コード】
#include<iostream>
#include<cstdio>
using namespace std;
int l = 1,r = 1;
int acioi[1000006];
int tong[2020];
int js = 0;
int L,R,M = 0x7fffffff;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(register int i = 1;i <= n;++ i)
scanf("%d",&acioi[i]);
tong[acioi[1]] ++;
js ++;
for(l = 1,r = 1;l <= n;++ l)
{
tong[acioi[l - 1]] --;
if(tong[acioi[l - 1]] == 0)
js --;
while(js < m && r <= n)
{
++r;
tong[acioi[r]] ++;
if(tong[acioi[r]] == 1)
js ++;
}
if(js == m && r - l + 1 < M)
{
M = r - l + 1;
L = l;R = r;
}
}
cout << L << " " << R << endl;
return 0;
}