20161005 NOIP 模擬賽 T2 解題報告

2022-06-02 16:15:14 字數 1915 閱讀 4343

beautiful

2.1 題目描述

乙個長度為 n 的序列,對於每個位置 i 的數 ai 都有乙個優美值,其定義是:找到序列中最 長的一段 [l, r],滿足 l ≤ i ≤ r,且 [l, r] 中位數為 ai(我們比較序列中兩個位置的數的大小時, 以數值為第一關鍵字,下標為第二關鍵字比較。這樣的話 [l, r] 的長度只有可能是奇數),r - l + 1 就是 i 的優美值。 接下來有 q 個詢問,每個詢問 [l, r] 表示查詢區間 [l, r] 內優美值的最大值。

2.2 輸入

第一行輸入 n 接下來 n 個整數,代表 ai 接下來 q,代表有 q 個區間接下來 q 行,每行 兩個整數 l, r(l ≤ r),表示區間的左右端點

2.3 輸出

對於每個區間的詢問,輸出答案

2.4 sample input

8 16 19 7 8 9 11 20 16

8 3 8

1 4

2 3

1 1

5 5

1 2

2 8

7 82.5 sample output

7 3

1 3

5 3 7 3

32.6 資料範圍及約定

對於 30% 的資料,滿足 n,q ≤ 50

對於 70% 的資料,滿足 n,q ≤ 2000 對於所有資料,滿足 n ≤ 2000, q ≤ 100000,ai ≤ 200

———————————————分割線———————————————

考試沒有理解這道題,導致連暴力都沒有寫出來,本題直接爆零。

看完標程和解題報告後豁然開朗。

n2 預處理。對於每個數,往左往右各掃一遍,遇到大於它的數則狀態 s++,小於則 s--, 由題目定義可知沒有相等的。然後記錄下每個狀態 s 的最長長度,然後列舉左邊的狀態,找右邊的狀態,取 max 計算出優美值。 接著就是乙個純 rmq 的問題了.

1 #include "

cstdio

"2 #include "

cstring

"3 #include "

iostream"4

5using

namespace

std ;

6const

int maxn = 10010;7

const

int inf = 2147483647

;8 typedef long

long

qaq ;910

intl[ maxn ] , r[ maxn ] , w[ maxn ] , a[ maxn ] ;

1112 inline int max ( int x , int y )

1314

void init ( int

n )

2627 _cnt = 0;28

for ( int j = i + 1 ; j <= n ; ++j )

3334

for ( int j = 1 - i ; j <= i - 1 ; ++j ) 38}

39}40}

41int

main ( )

47init ( n ) ;

48 scanf ( "

%d" , &t ) ;

49while ( t--)

55 }

beauitiful

noip_rp++;

2016-10-08 00:18:20

(完)

noip模擬賽 密碼

表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...

NOIP模擬賽 老師

題目描述 一座有n層的教學樓裡有一些學生,第i 0 i n 層有studentsi個學生。你被給定了乙個數k,如果第i層有x個學生,那麼這一層需要 x k 個老師。你可以調整每個學生的樓層,但是每個學生至多只能調整一層,就是說第i層的學生只能去第i 1層 如果有的話 第i層 第i 1層 如果i 1 ...

NOIP模擬賽 分錢

題目描述 兩個人在街上撿到了一些錢,這些錢共有n張,他們等了很久也沒有等來失主,於是決定把錢平分。但錢可能無法平分。他們先把能夠平分的錢盡量先平分了,使得剩下不能平分的錢盡量少。這些不能平分的錢怎麼辦呢他?他們決定拿去賭場裡面賭一把。他們運氣太好了,那些不能平分的錢變成了雙倍,於是他們就把那個錢分了...