1495 中國好區間 尺取法

2022-04-30 00:57:14 字數 532 閱讀 5347

鏈結在這裡

問的是乙個數字序列中,有多少個第k大的數》=t的區間.

這題相當於問:有多少個》=k個」滿足大於等於t「的元素的區間.

預處理dp[i]為前i項元素》=t的元素個數之和. 尺取維護l和r.如果dp[r]-dp[l-1]>=k,說明[l,r]這個區間是合法的,那麼對於l來說, [l,e],其中e∈[r,n]都是合法的,所以答案+=n-r+1個元素. 注意用ll防止溢位

#include using

namespace

std;

#define ll long long

const

int maxn=1e7+5

;int

dp[maxn];

intmain()

ll l = 1, r = k, ans = 0

;

while (1

) cout

<< ans << "\n"

;

return0;

}

51Nod 1495 中國好區間 尺取法

題意 在某一串行中,問有多少個好區間 區間長度大於等於 k 並且第 k 大的數大於等於 t。解題思路 1 滿足第 k 大的數大於等於 t,相當於在該區間中至少有 k 個數大於等於 t 用字尾陣列儲存該序列中前 i 個位置大於 t 的數。2 如果固定左端點,那麼對於乙個好區間,那麼右端點一定是可以往後...

bzoj1495 中國好區間

阿爾法在玩乙個遊戲,阿爾法給出了乙個長度為n的序列,他認為,一段好的區間,它的長度是 k的,且該區間的第k大的那個數,一定大於等於t。那麼問題來了,阿爾法想知道有多少好的區間。由於阿爾法的序列長度實在是太大了,無法在規定時間內讀入。他想了乙個絕妙的方法。讀入a 0 b,c,p,則a i a i 1 ...

51Nod 1495 中國好區間

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