链接:http://acm.hdu.edu.cn/showproblem.php?pid=4666
题意:给出若干个n维的点,求它们的最远曼哈段距离。
参考:http://www.cnblogs.com/lmnx/articles/2479747.html
POJ 2926 Requirements:http://poj.org/problem?id=2926
#include<cstdio> #include<set> using namespace std; const int maxn=60000+5; int a[maxn][7]; int q,k,w; multiset<int> m[40]; void solve(int s,int flag) { for(int i=0;i<w;i++) { int sum=0; for(int j=0;j<k;j++) if(i&(1<<j)) sum+=a[s][j]; else sum-=a[s][j]; if(flag) m[i].insert(sum); else { multiset<int>::iterator it; it=m[i].find(sum); m[i].erase(it); } } } int main() { while(~scanf("%d%d",&q,&k)) { w=1<<k; for(int i=0;i<w;i++) m[i].clear(); int c; for(int i=1;i<=q;i++) { scanf("%d",&c); if(!c) { for(int j=0;j<k;j++) scanf("%d",&a[i][j]); solve(i,true); } else { int t; scanf("%d",&t); solve(t,false); } int ans=0; for(int j=0;j<w;j++) { int t1=*(m[j].begin()); multiset<int>::iterator it; it=m[j].end(); --it; int t2=(*it); if(t2-t1>ans) ans=t2-t1; } printf("%d ",ans); } } return 0; }
这个算法还不是很理解。