最敏捷的機械人(線段樹維護區間最值)

2022-05-11 16:20:01 字數 1162 閱讀 3917

題面:

wind設計了很多機械人。但是它們都認為自己是最強的,於是,一場比賽開始了……機器人們都想知道誰是最敏捷的,於是它們進行了如下乙個比賽。首先,他們面前會有一排共n個數,它們比賽看誰能最先把每連續k個數中最大和最小值寫下來,當然,這些機械人運算速度都很,它們比賽的是誰寫得快。但是wind也想知道答案,你能幫助他嗎?

input:

每組測試資料

第1行為n,k(1<=k<=n<=100000)

第2行共n個數,為數字序列,所有數字均在int範圍內。

output:

共n-k+1行

第i行為第i~i+k-1這k個數中的最大和最小值

sample input:

5 31 2 3 4 5

sample output:

3 14 2

5 3solution:

線段樹維護區間最大值和區間最小值,再暴力查詢即可

要注意的是給出的數字可能為負數(在int範圍內)

code:

#includeusing namespace std;

int n,m,a[1000001];

struct sgttree[500001];

void build(int k,int l,int r)

int mid=(l+r)>>1;

build(k<<1,l,mid);build(k<<1|1,mid+1,r);

tree[k].minn=min(tree[k<<1].minn,tree[k<<1|1].minn);

tree[k].maxn=max(tree[k<<1].maxn,tree[k<<1|1].maxn);

}int query_min(int l,int r,int l,int r,int k)

int query_max(int l,int r,int l,int r,int k)

}t;inline int read()

while(isdigit(ch))

return x*f;

}int main()

最敏捷的機械人

題目描述 wind 設計了很多機械人。但是它們都認為自己是最強的,於是,一場比賽開始了 機器人們都想知道誰是最敏捷的,於是它們進行了如下乙個比賽。首先,他們面前會有一排共 n 個數,它們比賽看誰能最先把每連續 k 個數中最大和最小值寫下來,當然,這些機械人運算速度都很快,它們比賽的是誰寫得快。但是 ...

loj 10120 最敏捷的機械人

題目描述 wind 設計了很多機械人。但是它們都認為自己是最強的,於是,一場比賽開始了 機器人們都想知道誰是最敏捷的,於是它們進行了如下乙個比賽。首先,他們面前會有一排共 n 個數,它們比賽看誰能最先把每連續 k 個數中最大和最小值寫下來,當然,這些機械人運算速度都很快,它們比賽的是誰寫得快。但是 ...

1542 例 2 最敏捷的機械人

題目描述 wind 設計了很多機械人。但是它們都認為自己是最強的,於是,一場比賽開始了 機器人們都想知道誰是最敏捷的,於是它們進行了如下乙個比賽。首先,他們面前會有一排共 n 個數,它們比賽看誰能最先把每連續 k 個數中最大和最小值寫下來,當然,這些機械人運算速度都很快,它們比賽的是誰寫得快。但是 ...