一、AcWing 99. 激光炸弹
1. 问题描述
2. 问题解决
#include <iostream>
using namespace std;
typedef long long LL;
const int N = 5010 ;
int n, r;
int s[ N] [ N] ;
int max_x, max_y;
int main ( )
{
cin >> n >> r;
r = min ( 5001 , r) ;
max_x = max_y = r;
while ( n-- )
{
int x, y, w;
scanf ( "%d %d %d" , & x, & y, & w) ;
x++ , y++ ;
max_x = max ( max_x, x) , max_y = max ( max_y, y) ;
s[ x] [ y] + = w;
}
for ( int i = 1 ; i <= max_x; i++ )
for ( int j = 1 ; j <= max_y; j++ )
s[ i] [ j] + = s[ i] [ j- 1 ] + s[ i- 1 ] [ j] - s[ i- 1 ] [ j- 1 ] ;
int m = 0 ;
for ( int i = r; i <= max_x; i++ )
for ( int j = r; j <= max_y; j++ )
{
int val = s[ i] [ j] - s[ i- r] [ j] - s[ i] [ j- r] + s[ i- r] [ j- r] ;
m = max ( val, m) ;
}
cout << m << endl;
return 0 ;
}
二、AcWing 1210. 连号区间数
1. 问题描述
2. 问题解决
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10010 , INF = 100000000 ;
int n;
int a[ N] ;
int main ( )
{
cin >> n;
for ( int i = 0 ; i < n; i ++ ) cin >> a[ i] ;
int res = 0 ;
for ( int i = 0 ; i < n; i ++ )
{
int minv = INF, maxv = - INF;
for ( int j = i; j < n; j ++ )
{
minv = min ( minv, a[ j] ) ;
maxv = max ( maxv, a[ j] ) ;
if ( maxv - minv == j - i) res ++ ;
}
}
cout << res << endl;
return 0 ;
}