## IOI '10 P3 - Quality of Living

View as PDF

Points: 15 (partial)
Time limit: 4.5s
Memory limit: 256M

Problem type
Allowed languages
C, C++

Cities in Alberta tend to be laid out as rectangular grids of blocks. Blocks are labeled with coordinates to from north to south and to from west to east.

The quality of living in each particular block has been ranked by a distinct number, called quality rank, between and , where is the best and is the worst.

The city planning department wishes to identify a rectangular set of blocks with dimensions from north to south and from west to east, such that the median quality rank among all blocks in the rectangle is the best. and are odd numbers not exceeding and respectively. The median quality rank among an odd number of quality ranks is defined to be the quality rank in the set such that the number of quality ranks better than equals the number of quality ranks worse than .

You are to implement a procedure rectangle(R,C,H,W,Q) where and represent the total size of the city, and represent the dimensions of the set of blocks, and is an array such that is the quality rank for the block labeled from north to south and from west to east.

Your implementation of rectangle must return a number: the best (numerically smallest) possible median quality rank of an by rectangle of blocks.

Each test run will only call rectangle once.

#### Example 1

R=5, C=5, H=3, W=3,
Q=  5 11 12 16 25
17 18  2  7 10
4 23 20  3  1
24 21 19 14  9
6 22  8 13 15


For this example, the best (numerically smallest) median quality rank of is achieved by the middle-right rectangle of shown in bold. That is,

rectangle(R,C,H,W,Q)=9


#### Example 2

R=2, C=6, H=1, W=5,
Q=  6  1  2 11  7  5
9  3  4 10 12  8


For this example the correct answer is .

##### Subtask 1 [20 points]

Assume and do not exceed .

##### Subtask 2 [20 points]

Assume and do not exceed .

##### Subtask 3 [20 points]

Assume and do not exceed .

##### Subtask 4 [20 points]

Assume and do not exceed .

##### Subtask 5 [20 points]

Assume and do not exceed .

#### Implementation Details

• Implementation folder: /home/ioi2010-contestant/quality/ (prototype: quality.zip)
• To be implemented by contestant: quality.c or quality.cpp or quality.pas
• Contestant interface: quality.h or quality.pas
• Grader interface: none
• Sample grader: grader.c or grader.cpp or grader.pas
• Sample grader input: grader.in.1 grader.in.2 etc.
Note: The first line of input contains: The following lines contain the elements of , in row-major order.
• Expected output for sample grader input: grader.expect.1 grader.expect.2 etc.

int rectangle(int R,int C,int H,int W,int Q[3001][3001]);