acdream1197 Points In Cuboid(hash树状数组)
题目链接:http://acdream.info/problem?pid=1197
题意:给出三维空间n个点,m个查询,每次查询某个立方体内的点的个数。
思路:按照一维排序,根据查询插入,其他两位用二位树状数组维护。由于这个坐标太大,二位数组开不出来。这时候就是hash,对于一个位置(x,y),哈希成一个数,作为下标。查询的时候不存在的数字为0.
const int mod=4000007;
const int INF=1000000005;
const int N=100005;
const int M=20011;
struct node
{
int x,y,z;
};
node a[N],b[N][2];
int n,m;
int ans[N];
pii Q[N];
int cmp(node a,node b)
{
return a.z<b.z;
}
int A[mod];
int arr[mod];
inline int ha(int x)
{
int k=x%mod;
int i;
for(i=k;;i++)
{
if(i==mod) i=0;
if(A[i])
{
if(A[i]==x) return i;
}
else
{
A[i]=x;
return i;
}
}
}
inline int find(int x)
{
int k=x%mod;
int i;
for(i=k;;i++)
{
if(i==mod) i=0;
if(A[i])
{
if(A[i]==x) return i;
}
else
{
return i;
}
}
return 0;
}
int que(int x,int y)
{
if(!x||!y) return 0;
int ans=0;
while(x)
{
int i;
for(i=y;i;i-=i&-i)
{
ans+=arr[find(x*M+i)];
}
x-=x&-x;
}
return ans;
}
void add(int x,int y)
{
while(x<M)
{
int i=y;
while(i<M) arr[ha(x*M+i)]++,i+=i&-i;
x+=x&-x;
}
}
int cal(int t)
{
int ans=0;
ans+=que(b[t][1].x,b[t][1].y);
ans-=que(b[t][1].x,b[t][0].y-1);
ans-=que(b[t][0].x-1,b[t][1].y);
ans+=que(b[t][0].x-1,b[t][0].y-1);
return ans;
}
void cal()
{
clr(A,0);
clr(arr,0);
int i;
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
a[i].x+=10005;
a[i].y+=10005;
}
scanf("%d",&m);
int j;
for(i=1;i<=m;i++)
{
for(j=0;j<2;j++)
{
scanf("%d%d%d",&b[i][j].x,&b[i][j].y,&b[i][j].z);
b[i][j].x+=10005;
b[i][j].y+=10005;
}
if(b[i][0].x>b[i][1].x) swap(b[i][0].x,b[i][1].x);
if(b[i][0].y>b[i][1].y) swap(b[i][0].y,b[i][1].y);
if(b[i][0].z>b[i][1].z) swap(b[i][0].z,b[i][1].z);
Q[i*2-1]=MP(b[i][0].z-1,-i);
Q[i*2]=MP(b[i][1].z,i);
}
sort(a+1,a+n+1,cmp);
sort(Q+1,Q+2*m+1);
j=1;
for(i=1;i<=m;i++) ans[i]=0;
for(i=1;i<=n;i++)
{
while(j<=2*m&&Q[j].first<a[i].z)
{
int x=Q[j].second;
if(x>0) ans[x]+=cal(x);
else ans[-x]-=cal(-x);
j++;
}
add(a[i].x,a[i].y);
}
while(j<=2*m)
{
int x=Q[j].second;
if(x>0) ans[x]+=cal(x);
else ans[-x]-=cal(-x);
j++;
}
for(i=1;i<=m;i++) printf("%d\n",ans[i]);
}
int main()
{
int num=0;
while(scanf("%d",&n)!=-1)
{
printf("Case #%d:\n",++num);
cal();
}
}
acdream1197 Points In Cuboid(hash树状数组)的更多相关文章
- [bzoj2124]等差子序列(hash+树状数组)
我又来更博啦 2124: 等差子序列 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 941 Solved: 348[Submit][Statu ...
- URAL-1989 Subpalindromes 多项式Hash+树状数组
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1989 题意:给出一个字符串,m个操作:1,修改其中一个字符串,2,询问 [a, b] 是 ...
- P7114 [NOIP2020] 字符串匹配 (字符串hash+树状数组)
好多题解用的扩展KMP(没学过,所以不用这种方法). 我们按照题目要求记F(s)表示s串的权值,可以预处理出前缀权值(用于A)和后缀权值(用于C),枚举AB的长度i=2~n-1,不需要分开枚举,我们只 ...
- CF452F Permutations/Luogu2757 等差子序列 树状数组、Hash
传送门--Luogu 传送门--Codeforces 如果存在长度\(>3\)的等差子序列,那么一定存在长度\(=3\)的等差子序列,所以我们只需要找长度为\(3\)的等差子序列.可以枚举等差子 ...
- bzoj 2124 等差子序列 树状数组维护hash+回文串
等差子序列 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 1919 Solved: 713[Submit][Status][Discuss] Desc ...
- 【BZOJ2124】等差子序列 树状数组维护hash值
[BZOJ2124]等差子序列 Description 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pLen<=N ...
- ACdreamoj 1011(树状数组维护字符串hash前缀和)
题目链接:http://acdream.info/problem? pid=1019 题意:两种操作,第一种将字符串某个位置的字符换为还有一个字符.另外一种查询某个连续子序列是否是回文串: 解法:有两 ...
- bzoj 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛【dp+树状数组+hash】
最长上升子序列.虽然数据可以直接n方但是另写了个nlogn的 转移:f[i]=max(f[j]+1)(a[j]<a[i]) O(n^2) #include<iostream> #in ...
- ural 1989(树状数组+多项式hash)
题意:给出一个字符串.有两种操作,一个是p a b,问字符串从位置a到位置b的子串是否是一个回文子串.还有一个操作 c a b,把字符串位置a的字符替换为b. 题解:由于字符串长度为1e5且问的次数也 ...
随机推荐
- java-excel导出
java excel导出分为两种2003年的格式和2007年的格式. 2003年的xls一个sheet限制65536. 2007年的xlsx限制为1048576. jxl导入2003 gradle j ...
- Immediate assertion
Imemdiate assertion可以放在任何procedural statement中, assertion被执行判断,当这个procedural code被执行的时候.其他时间是不会被执行的. ...
- 二项分布 多项分布 伽马函数 Beta分布
http://blog.csdn.net/shuimu12345678/article/details/30773929 0-1分布: 在一次试验中,要么为0要么为1的分布,叫0-1分布. 二项分布: ...
- 编译php时的一个脚本
./configure --prefix=/usr/local/php \ --with-curl \ --with-freetype-dir \ --with-gd \ --with-gettext ...
- 由linux下的多进程编程引发的关于进程间隔离的思考
源代码放到了三个文件中: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include & ...
- 白盒测试的学习之路----(四)搭建测试框架TestNG测试
TestNG是一个开源自动化测试框架; TestNG是类似于JUnit,但它不是一个JUnit扩展.它的灵感来源于JUnit.它的目的是优于JUnit的,尤其是当测试集成的类. TestNG消除了大部 ...
- 《zw版·delphi与halcon系列原创教程》zw版_THOperatorSetX控件函数列表 v11中文增强版
<zw版·delphi与halcon系列原创教程>zw版_THOperatorSetX控件函数列表v11中文增强版 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就 ...
- ASP.NET 中通过Form身份验证 来模拟Windows 域服务身份验证的方法
This step-by-step article demonstrates how an ASP.NET application can use Forms authentication to ...
- Hadoop实战4:MapR分布式集群的安装配置及shell自动化脚本
MapR的分布式集群安装过程还是很艰难的,远远没有计划中的简单.本人总结安装配置,由于集群有很多机器,手动每台配置是很累的,编写了一个自动化配置脚本,下面以脚本为主线叙述(脚本并不完善,后续继续完善中 ...
- javaWeb---Servlet
1.整个Servlet页面跳转访问流程: 1.1:依据form表单的action的值找到web.xml中servlet-mapping的url的值找到对应的java类,在根据form中的method属 ...