洛谷 P1638 逛畫展 尺取法

2021-09-22 21:23:16 字數 1307 閱讀 9511

link

description

博覽館正在展出由世上最佳的 m 位畫家所畫的圖畫。wangjy想到博覽館去看這幾位大師的作品。

可是,那裡的博覽館有乙個很奇怪的規定,就是在購買門票時必須說明兩個數字,a和b,代表他要看展覽中的第 a 幅至第 b 幅畫(包含 a 和 b)之間的所有圖畫,而門票的價錢就是一張圖畫一元。

為了看到更多名師的畫,wangjy希望入場後可以看到所有名師的圖畫(至少各一張)。可是他又想節省金錢。。。作為wangjy的朋友,他請你寫乙個程式決定他購買門票時的 a 值和 b 值。

給定乙個含k

kk種數字的序列,求出同時含這k

kk種數字的最小區間,若有長度相同的幾個最小區間,輸出左端點最小的那個區間。

solution

使用兩個指標,維護區間,考慮維護乙個含有k

kk種數字的區間,不斷向右移動右指標,向右移動左指標,並保證k

kk種數字,同時更新所需要查詢的最小區間。

about

尺取法一般用來解決具有單調性問題的區間問題,有些題目也可以用二分解決。往往可以把不單調區間轉化為單調區間,然後使用尺取法。

code

// luogu-judger-enable-o2

#include

#include

#include

#include

#include

#include

//#include

using

namespace std;

#define maxn 1000900

#define inf 0x3f3f3f3f

typedef

long

long ll;

struct edgee[2]

;int head[1]

,cnt;

void

add(

int x,

int y,

int w)

intread()

while

(c>=

'0'&&c<=

'9')

return x*f;

}int n,m,a[maxn]

,cot[

2005];

intmain()

elseif(

++cot[a[

++r]]==

1)num++;if

(num==m)

} cout<" "<}

我們堅持一件事情,並不是因為這樣做了會有效果,而是堅信,這樣做是對的。

——哈維爾

P1638 逛畫展 (尺取法)

傳送門 思路 顯然區間具有單調性,所以可以通過列舉區間左端點,讓區間右端點不斷增加,至於區間畫的種類數,用乙個陣列記錄區間的 l r 的畫的種類數,不斷更新即可。時間複雜度 o n o n o n ac include include include include include include ...

P1638 逛畫展 左右指標移動

這道題不是莫隊,只是有莫隊的影子 題意 給出n個數字,給出m個畫家 表示這n個數字為1 m 讓我們找到乙個最小的範圍涵蓋這1 m個數,如果多解,則輸出左區間最小的解 思路 我們用左右指標移動來做此題,類似於莫隊 那麼如何做呢?我們一開始從第乙個端點開始,把第乙個端點納進來,然後開始分情況討論 假如已...

雙指標法典中典 逛畫展(洛谷P1638)

題目描述 博覽館正在展出由世上最佳的 m 位畫家所畫的圖畫。wangjy想到博覽館去看這幾位大師的作品。可是,那裡的博覽館有乙個很奇怪的規定,就是在購買門票時必須說明兩個數字,a和b,代表他要看展覽中的第 a 幅至第 b 幅畫 包含 a 和 b 之間的所有圖畫,而門票 的價錢就是一張圖畫一元。為了看...