Skip to content

Commit 8f12f2c

Browse files
authored
Create 2019-C-B.cpp
RMQ
1 parent 18437ed commit 8f12f2c

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

Diff for: kick-start/2019-C-B.cpp

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#include<bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
#define ms(x,v) memset(x,(v), sizeof(x))
6+
#define msn(x,v,n) memset(x,(v),sizeof(x[0]) * n)
7+
#define INF 0x3f3f3f3f
8+
9+
typedef long long LL;
10+
typedef pair<int,int> PII;
11+
12+
const int MAXN = 300 + 3;
13+
14+
15+
struct RMQ{
16+
int minA[10][MAXN],maxA[10][MAXN];
17+
void init(const int * a,int n){
18+
for(int i=0 ; i<n ; ++i){
19+
minA[0][i] = maxA[0][i] = a[i];
20+
}
21+
for(int j=1 ; (1<<j)<=n ; ++j)
22+
for(int i=0 ; i+(1<<(j-1)) <n ; ++i){
23+
minA[j][i] = min(minA[j-1][i],minA[j-1][i+(1<<(j-1))]);
24+
maxA[j][i] = max(maxA[j-1][i],maxA[j-1][i+(1<<(j-1))]);
25+
}
26+
}
27+
28+
pair<int,int> query_min_max(int l,int r){
29+
if(l>r)return PII(0,0);
30+
int k=0;
31+
while((1<<(k+1)) <= r-l+1) ++k;
32+
return make_pair(min(minA[k][l],minA[k][r-(1<<k)+1]),max(maxA[k][l],maxA[k][r-(1<<k)+1]));
33+
}
34+
35+
};
36+
37+
RMQ rmq[MAXN];
38+
int rr,cc,kk;
39+
int aux[MAXN];
40+
41+
int solve(){
42+
int ans =0;
43+
for(int l = 0 ; l < cc ; ++l)
44+
for(int r = l ; r < cc ; ++r){
45+
int len = 0;
46+
int cur_len = 0;
47+
for(int row = 0; row < rr ; ++row){
48+
auto minmax = rmq[row].query_min_max(l,r);
49+
if( minmax.second - minmax.first <=kk){
50+
cur_len ++;
51+
if(len < cur_len)len = cur_len;
52+
}else cur_len = 0;
53+
}
54+
ans = max(ans , len * (r -l+1));
55+
}
56+
return ans;
57+
}
58+
59+
int main(int argc, char const *argv[])
60+
{
61+
ios :: sync_with_stdio(0);
62+
cin.tie(0);
63+
std::cout.precision(8);
64+
std::cout.setf( std::ios::fixed, std:: ios::floatfield );
65+
int T;
66+
cin >> T;
67+
68+
for(int t =1; t <= T ; ++t)
69+
{
70+
cin >> rr >> cc >> kk;
71+
for(int i=0 ; i< rr ; ++i){
72+
for(int j=0 ; j< cc ; ++j)
73+
cin >> aux[j];
74+
rmq[i].init(aux,cc);
75+
}
76+
cout << "Case #"<<t << ": " << solve() << "\n";
77+
}
78+
79+
return 0;
80+
}

0 commit comments

Comments
 (0)