*cornfields <pku 2019>

 
  
 // 二维 rmq .
1 // author : gssn
2 // date : 5.17
3 #include < iostream >
4 #include < cmath >
5 using namespace std;
6 int maxx[ 255 ][ 255 ][ 8 ],minn[ 255 ][ 255 ][ 8 ],f[ 255 ][ 255 ];
7 int n,b,kk;
8 void init()
9 {
10 int len = int (log( double (n)) / log( 2.0 ));
11 for ( int k = 1 ;k <= len;k ++ )
12 {
13 for ( int i = 1 ;i <= n;i ++ )
14 {
15 for ( int j = 1 ;j + ( 1 << (k - 1 )) - 1 <= n;j ++ )
16 {
17 maxx[i][j][k] = max(maxx[i][j][k - 1 ],maxx[i][j + ( 1 << (k - 1 ))][k - 1 ]);
18 minn[i][j][k] = min(minn[i][j][k - 1 ],minn[i][j + ( 1 << (k - 1 ))][k - 1 ]);
19 }
20 }
21 }
22 }
23 int query_( int a, int c, int len)
24 {
25 int x =- 1 ,y = 1000 ;
26 for ( int i = a;i < a + b;i ++ ){
27 x = max(x,max(maxx[i][c][len],maxx[i][c + b - ( 1 << len)][len]));
28 y = min(y,min(minn[i][c][len],minn[i][c + b - ( 1 << len)][len]));
29 }
30 return x - y;
31 }
32 int main()
33 {
34 int a,c;
35 cin >> n >> b >> kk;
36 for ( int i = 1 ;i <= n;i ++ )
37 for ( int j = 1 ;j <= n;j ++ )
38 {
39 cin >> f[i][j];
40 maxx[i][j][ 0 ] = minn[i][j][ 0 ] = f[i][j];
41 }
42 int len = int (log( double (b)) / log( 2.0 ));
43 init();
44 while (kk -- )
45 {
46 cin >> a >> c;
47 cout << query_(a,c,len) << endl;
48 }
49 return 0 ;
50 }

转载于:https://www.cnblogs.com/eth0/archive/2011/05/17/2048838.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值