| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
贴个c++代码,单调队列#include <iostream>
#include <deque>
using namespace std;
const int MAX_N = 256;
struct P
{
int v;
int n;
P(const int& v = 0, const int& n = 0)
:v(v), n(n) {}
};
int dp[2][MAX_N][MAX_N];
int main()
{
deque<P> dq1, dq2;
int N, B, K, m, n;
scanf("%d%d%d", &N, &B, &K);
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < N; ++j)
{
scanf("%d", &m);
if (!dq1.empty() && dq1.front().n + B <= j)
{
dq1.pop_front();
}
if (!dq2.empty() && dq2.front().n + B <= j)
{
dq2.pop_front();
}
while (!dq1.empty() && dq1.back().v > m)
{
dq1.pop_back();
}
while (!dq2.empty() && dq2.back().v < m)
{
dq2.pop_back();
}
dq1.push_back(P(m, j));
dq2.push_back(P(m, j));
if (j - B + 1 >= 0)
{
dp[0][i][j - B + 1] = dq1.front().v;
dp[1][i][j - B + 1] = dq2.front().v;
}
}
dq1.clear();
dq2.clear();
}
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < N; ++j)
{
const int& m1 = dp[0][j][i];
const int& m2 = dp[1][j][i];
if (!dq1.empty() && dq1.front().n + B <= j)
{
dq1.pop_front();
}
if (!dq2.empty() && dq2.front().n + B <= j)
{
dq2.pop_front();
}
while (!dq1.empty() && dq1.back().v > m1)
{
dq1.pop_back();
}
while (!dq2.empty() && dq2.back().v < m2)
{
dq2.pop_back();
}
dq1.push_back(P(m1, j));
dq2.push_back(P(m2, j));
if (j - B + 1 >= 0)
{
dp[0][j - B + 1][i] = dq1.front().v;
dp[1][j - B + 1][i] = dq2.front().v;
}
}
dq1.clear();
dq2.clear();
}
while (K--)
{
scanf("%d%d", &m, &n);
--m;
--n;
printf("%d\n", dp[1][m][n] - dp[0][m][n]);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator