码迷,mamicode.com
首页 > 其他好文 > 详细

刷过一题之矩阵最小值

时间:2016-04-02 16:03:42      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

输入

第一行n和m,表示行数和列数
接下来n行表示矩阵
再来一行一个整数q,表示询问个数
接下来q行,每行四个整数x1,y1,x2,y2表示左上右下的坐标

 

输出

对于每个询问输出一个整数表示该矩阵范围内的整数和

 

输入示例

5 5
1 2 5 4 1
1 1 7 6 8
8 7 9 5 2
4 4 4 1 8
5 10 11 13 7
3
2 1 4 3
2 2 5 5
4 1 5 4

 

输出示例

45
103
52

 

n,m < 2001
q < 100001
矩阵内所有数小于2000

 

前缀和,区间覆盖问题。想一想数学中的集合与公共面积。

 

技术分享
 1 #include<iostream>
 2 #define ll long long
 3 using namespace std;
 4 int a,b;
 5 int x,y,x1,y1;
 6 ll n[2050][2050];
 7 int read()
 8 {
 9     int x=0,f=1;
10     char ch=getchar();
11     while(ch<0||ch>9) {if(ch==-) f=-1;ch=getchar();}
12     while(ch>=0&&ch<=9) {x=x*10+ch-0;ch=getchar();}
13     return x*f;
14 }
15 int main()
16 {
17     a=read();
18     b=read();
19     for(int i=1;i<=a;i++)
20         for(int j=1;j<=b;j++)
21         {
22             n[i][j]=read();
23             n[i][j]=n[i][j]+n[i][j-1]+n[i-1][j]-n[i-1][j-1];
24         }
25     int q;
26     q=read();
27     for(int i=0;i<q;i++)
28     {
29         x=read();
30         y=read();
31         x1=read();
32         y1=read();
33         ll ans=n[x1][y1]-n[x1][y-1]-n[x-1][y1]+n[x-1][y-1];
34         printf("%lld\n",ans);
35     }
36     //system("pause>nul");
37     return 0;
38 }
View Code

 

刷过一题之矩阵最小值

标签:

原文地址:http://www.cnblogs.com/nightfury/p/5347609.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!