题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=4666
求k维的最远曼哈顿距离
没有初始化 最后wa了...
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <functional>
#define MAXSIZE 60000+3
#define MAXTYPE ((1<<5)+3)
#define INF ((1<<31)-1)
using namespace std;
struct node1
{
friend bool operator<(node1 n1, node1 n2)
{
return n1.value < n2.value;
}
int value, point;
};
struct node2
{
friend bool operator< (node2 n1, node2 n2)
{
return n1.value > n2.value;
}
int value, point;
};
int n, dem, flag, point[6], del, ans;
bool exist[MAXSIZE];
int main()
{
int i, j, k, tmp, t, s;
while (scanf("%d %d\n", &n, &dem) != EOF)
{
ans = 0;
priority_queue<node1> maxx[MAXTYPE]; // 没有初始化 wa了 好囧
priority_queue<node2> minx[MAXTYPE]; //开的是全局变量... 弄进来就好了
memset(exist, 0, sizeof(exist));
tmp = 1<<dem;
for (i = 1; i <= n; i++)
{
scanf("%d", &flag);
if (!flag)
{
exist[i] = true;
for (j = 1; j <= dem; j++) scanf("%d", &point[j]);
for (j = 0; j < tmp; j++)
{
t = j;
s = 0;
for(k = 1; k <= dem; k++)
{
if(t & 1) s += point[k];
else s-= point[k];
t >>= 1;
}
node1 ttt;
ttt.value = s;
ttt.point = i;
node2 qqq;
qqq.value = s;
qqq.point = i;
maxx[j].push(ttt);
minx[j].push(qqq);
}
}
else
{
scanf("%d", &del);
exist[del] = false;
for (j = 0; j < tmp; j++)
{
while (!exist[maxx[j].top().point]) maxx[j].pop();
while (!exist[minx[j].top().point]) minx[j].pop();
}
}
ans = maxx[0].top().value-minx[0].top().value;
for (j = 1; j < tmp; j++)
{
if (ans < maxx[j].top().value-minx[j].top().value)
ans = maxx[j].top().value-minx[j].top().value;
}
printf("%d\n", ans);
}
}
return 0;
}