2015-01-25 00:59:14

思路:解法1:可以暴力预处理出每个点的答案...(当然维护一个正方形框可以优化这个过程)...

     解法2:建立二维线段树,然后查询...

   解法3.... ?

解法1:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <cmath>
 5 #include <vector>
 6 #include <map>
 7 #include <set>
 8 #include <stack>
 9 #include <queue>
10 #include <string>
11 #include <iostream>
12 #include <algorithm>
13 using namespace std;
14 
15 #define MEM(a,b) memset(a,b,sizeof(a))
16 #define REP(i,n) for(int i=1;i<=(n);++i)
17 #define REV(i,n) for(int i=(n);i>=1;--i)
18 #define FOR(i,a,b) for(int i=(a);i<=(b);++i)
19 #define RFOR(i,a,b) for(int i=(a);i>=(b);--i)
20 #define MP(a,b) make_pair(a,b)
21 
22 typedef long long ll;
23 typedef pair<int,int> pii;
24 const int INF = (1 << 30) - 1;
25 const int maxn = 300;
26 
27 int N,B,K;
28 int g[maxn][maxn];
29 int cnt[maxn],tmp[maxn],ans[maxn][maxn];
30 
31 int Solve(){
32     int tmax = -1,tmin = -1;
33     FOR(i,0,250) if(cnt[i]){
34         tmin = i;
35         break;
36     }
37     RFOR(i,250,0) if(cnt[i]){
38         tmax = i;
39         break;
40     }
41     return tmax - tmin;
42 }
43 
44 int main(){
45     while(scanf("%d%d%d",&N,&B,&K) != EOF){
46         REP(i,N) REP(j,N){
47             scanf("%d",&g[i][j]);
48         }
49         MEM(cnt,0);
50         REP(i,B) REP(j,B)
51             cnt[g[i][j]]++;
52         REP(i,N - B + 1){
53             if(i > 1){
54                 REP(k,B) cnt[g[i - 1][k]]--;
55                 REP(k,B) cnt[g[i + B - 1][k]]++;
56             }
57             memcpy(tmp,cnt,sizeof(tmp));
58             ans[i][1] = Solve();
59             FOR(j,2,N - B + 1){
60                 REP(k,B) cnt[g[i + k - 1][j - 1]]--;
61                 REP(k,B) cnt[g[i + k - 1][j + B - 1]]++;
62                 ans[i][j] = Solve();
63             }
64             memcpy(cnt,tmp,sizeof(tmp));
65         }
66         int a,b;
67         REP(i,K){
68             scanf("%d%d",&a,&b);
69             printf("%d\n",ans[a][b]);
70         }
71     }
72     return 0;
73 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-04
  • 2022-12-23
  • 2022-12-23
  • 2021-08-08
  • 2021-08-05
  • 2022-02-16
猜你喜欢
  • 2022-12-23
  • 2022-01-02
  • 2022-12-23
  • 2022-12-23
  • 2021-12-04
  • 2021-05-10
  • 2022-12-23
相关资源
相似解决方案