hdu 4417 离线树状数组
来源:互联网 发布:重庆旅游 知乎 编辑:程序博客网 时间:2024/06/11 21:00
题目大意:
给你一个数列,然后有m次查询,每次查询一段区间 [l,r] 内不大于 h 的值的个数。
解法:
这里我犯了个小小的错误,我存储时使用的开头下标是1,但是快排时我我写的是sort(p,p+m,cmp),最后一个元素没有进行排序。-.-找了好久,哎。。。。要细心啊!
给你一个数列,然后有m次查询,每次查询一段区间 [l,r] 内不大于 h 的值的个数。
解法:
离线 树状数组
预处理 先将数列与查询分别存储在结构体p,q中,并且将其按照h排序,由小到大。
1、若 p[i].h > q[j].h,则从 i 以后的 p[i].h 也不会再对这个查询的解有影响。此时我们可以得到这个查询的解 query(L, R)2、若 p[i].h <= q[j].h,则它会且仅会对从 j 以后的每个 q[j].h 产生影响。于是我们需要在区间中对这个位置加1,然后让 i 向后移动。
#include <cstdio>#include <algorithm>using namespace std;struct Point { int l,r,id,x;}p[100010],q[100010];int C[100010];int n,m;int ans[100010];int cmp(Point a,Point b){ return a.x<b.x;}int lowbit(int x){ return x&(-x);}int sum(int x){ int ret=0; while (x>0) { ret+=C[x];x-=lowbit(x); } return ret;}int add(int x,int d){ while (x<=n){ C[x]+=d;x+=lowbit(x); } return 0;}int query(int L,int R){ return sum(R)-sum(L-1);}int main (){ int T,t=1; scanf("%d",&T); while (t<=T){ scanf("%d%d",&n,&m); for (int i=1;i<=n;i++){ scanf("%d",&p[i].x); p[i].id=i; C[i]=0; } for (int i=1;i<=m;i++){ scanf("%d%d%d",&q[i].l,&q[i].r,&q[i].x); q[i].id=i; q[i].l++; q[i].r++; } sort(p,p+n+1,cmp); sort(q,q+m+1,cmp); int i,j; for (i=j=1;j<=m;j++){ while (i<=n&&p[i].x<=q[j].x){ add(p[i].id,1); i++; } //printf("%d %d %d %d %d\n",i,q[j].x,q[j].id,q[j].l,q[j].r); //for (int k=1;k<=n;k++) // printf("%d ",C[k]); //printf("\n"); ans[q[j].id]=query(q[j].l,q[j].r); } printf("Case %d:\n",t); for (int j=1;j<=m;j++) printf("%d\n",ans[j]); t++; } return 0;}
这里我犯了个小小的错误,我存储时使用的开头下标是1,但是快排时我我写的是sort(p,p+m,cmp),最后一个元素没有进行排序。-.-找了好久,哎。。。。要细心啊!
0 0
- hdu 4417 离线树状数组
- hdu 4417 离线树状数组 胡乱搞搞
- hdu 4417 树状数组 离线处理
- hdu 4417(树状数组+离线算法)
- hdu 4417 树状数组离线处理
- hdu 4638 (树状数组+离线)
- HDU 3333 树状数组离线
- HDU(3333)树状数组+离线
- HDU(3874)树状数组+离线
- hdu 3333 离线+树状数组
- hdu 4638 离线+树状数组
- hdu 4417 Super Mario 树状数组+离线操作
- hdu 4417 Super Mario(离线树状数组|划分树)
- HDU 4417 Super Mario (树状数组、离线处理)
- HDU 4417 Super Mario [树状数组+离线操作]【数据结构】
- HDU 4417 Super Mario (树状数组 + 离线)
- HDU-4417:Super Mario(树状数组+离线操作)
- HDU 4417 Super Mario(线段树||树状数组+离线操作 之树状数组篇)
- jsp trimDirectiveWhitespaces ="true"
- 【线段树】 HDOJ 3333 Turing Tree
- 使用gprof调试Qt程序的方法
- PV操作之独木桥问题
- ffmpeg和SDL教程(一)文件读取和保存
- hdu 4417 离线树状数组
- HashMap
- qtp录制ajax 下拉框 不成功解决方法
- java中用excel批量导入
- 0072 JAVA JNI 如何调用C或者C++生成的dll【基础】
- 黑马9期ASP.NET视频教程
- 一种并行随机梯度下降法
- Android自定义控件添加属性
- Android环境搭建