51Nod 1495 中國好區間 尺取法

2021-08-28 15:25:23 字數 817 閱讀 8277

題意:在某一串行中,問有多少個好區間------區間長度大於等於 k 並且第 k 大的數大於等於 t。

解題思路:

1、滿足第 k 大的數大於等於 t,相當於在該區間中至少有 k 個數大於等於 t------用字尾陣列儲存該序列中前 i 個位置大於 t 的數。

2、如果固定左端點,那麼對於乙個好區間,那麼右端點一定是可以往後延續的,若左端點向右移動,那麼離它最近的右端點不可能向左移動。因此可以使用雙指標來做這題。

3、如果固定右端點,那麼對於乙個好區間,肯定是某個左端點往左都滿足題意,雙指標就ok了!

ac**:

#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 1e7+5;

int s[maxn];

int main()

long long ans = 0,l = 1,r = 1;

// while(true)

// while(l <= n)

r++;

} if(r > n) break;//當 r>n 時,後面的就一定沒有滿足條件的區間

l++;

} printf("%lld\n",ans);

return 0;

}

51Nod 1495 中國好區間

acm模版 這個題真的很讓人出乎意料 沒成想,1e7的資料醬紫搞竟然能在0.7s內搞定。首先,我們暴力獲得陣列 a 然後使用尺取法,先獲取乙個滿足題意的 l 1,r cn t k 的區間,接著呢,很明顯只要右區間大於 r 都是好區間,然後尺取法往後繼續查詢剛好滿足 l r cn t k的區間,累計好...

51nod 1495 中國好區間

這道題給我說了尺取法我也不會,沒辦法只能看別人的部落格 感覺弄得好巧妙啊 首先,條件是選取的長度大於等於 k k 這個好理解,就他的兩個指標 r l 1 k role presentation r l 1 kr l 1 k就行了。但是要求從大到小第 k k 大的數要大於 t role present...

51nod1495 中國好區間

雙指標掃一遍 include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,t for int i s i t i define clr x,c memset ...