2017 10 7 國慶清北 D7T2 第k大區間

2022-05-03 13:48:18 字數 1578 閱讀 1495

定義乙個長度為奇數的區間的值為其所包含的的元素的中位數。

現給出n個數,求將所有長度為奇數的區間的值排序後,第k大的值為多少。

輸入格式:

輸入檔名為kth.in。

第一行兩個數n和k

第二行,n個數。(0<=每個數<2^31)

輸出格式:

乙個數表示答案

輸入樣例#1:

4 3

3 1 2 4【樣例解釋】[l,r]表示區間l~r的值

[1,1]:3

[2,2]:1

[3,3]:2

[4,4]:4

[1,3]:2

[2,4]:2

輸出樣例#1:

2
對於30%的資料,1<=n<=100;

對於60%的資料,1<=n<=300

對於80%的資料,1<=n<=1000

對於100%的資料,1<=n<=100000, k<=奇數區間的數

1/*2

二分答案t,統計中位數大於等於t的區間有多少個。

3設a[i]為前i個數中有a[i]個數》=t,若奇數區間[l,r]的中位數》=t,則(a[r]-a[l-1])*2>r-l+1,即(a[r]*2-r)>(a[l-1]*2-l+1)。

4設b[i]=a[i]*2-i,統計每個b[i]有多少個b[j]5*/6

7 #include8 #include9 #include10 #include11 #include12

#define n 100005

13using

namespace

std;

1415

long

long

n,k,ans;

16int a[n],b[n],c[n],f[2][n*3

];17

18 inline int lowbit(int

x)19

2223 inline void add(int x,int

p)24

2829 inline int query(int x,int

p)30

3637

long

long check(int

x)38

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

4649 add(n,0

);50

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

5155

return

sum;56}

5758 inline void

init()

5966 sort(b+1,b+n+1

);67

int l=1,r=n+1,mid=(l+r)>>1;68

while(l+1

6974 printf("%d"

,b[l]);75}

7677

intmain()

78

view code

2017 10 4 國慶清北 D4T2 正方形

在乙個10000 10000的二維平面上,有n顆糖果。lyk喜歡吃糖果!並且它給自己立了規定,一定要吃其中的至少c顆糖果!事與願違,lyk只被允許圈出乙個正方形,它只能吃在正方形裡面的糖果。並且它需要支付正方形邊長的價錢。lyk為了滿足自己的求食慾,它不得不花錢來圈乙個正方形,但它想花的錢盡可能少,...

2016國慶清北Day2T1

pa 題目描述 漢諾塔公升級了 現在我們有n個圓盤和n個柱子,每個圓盤大小都不一樣,大的圓盤不能放在小的圓盤上面,n個柱子從左到右排成一排。每次你可以將一 個柱子上的最上面的圓盤移動到右邊或者左邊的柱子上 如果移動之後是合法的 話 現在告訴你初始時的狀態,你希望用最少的步數將第i 大的盤子移動到第i...

常州模擬賽d7t2 陣列

hjz 的陣列初始時有 n 個元素。他可以把乙個位置上的數加上或減去乙個固定的 數 x。一天 ljz 和 hzy 來 hjz 家玩。ljz 突發奇想,提出了乙個問題 如何在給定的 操作步數內最小化陣列所有元素的乘積呢?hjz 百思不得其解,但是他想博得 hzy 的好感,就把這個問題交給你啦 由於最小...