http://acm.hdu.edu.cn/showproblem.php?pid=4417

题意:求区间内小于等于h的数的个数。

方法: 先对输入的n个数由小到大排序,在对查询的h由小到大排序。

#include<bits/stdc++.h>
using namespace std;
const int maxn=100005;
struct node
{int l,r,h,id;//输入查询的区间//id记录的是每个查询的次序,目的是在对查询区间排序后,能按原来的查询顺序输出结果
};
node q[maxn];
bool cmp(node a,node b)
{return a.h<b.h;
}
struct AA
{int val;int id;
};
AA a[maxn];
bool cmp1(AA a,AA b)
{return a.val<b.val;
}
int c[maxn],n;
int lowbit(int x)
{return x&(-x);
}int sum(int x)
//int query(int x)
{int res=0;while(x){res+=c[x];x-=lowbit(x);}return res;
}
void add(int x,int val)
{while(x<=n){c[x]+=val;x+=lowbit(x);}
}int ans[maxn];
int main()
{int i,j,cur,Q,t,cas;scanf("%d",&t);cas=0;while(t--){scanf("%d%d",&n,&Q);memset(c,0,sizeof(c));for(i=1;i<=n;i++){scanf("%d",&a[i].val);a[i].id=i;}sort(a+1,a+1+n,cmp1);for(i=1;i<=Q;i++){scanf("%d%d%d",&q[i].l,&q[i].r,&q[i].h);q[i].l=q[i].l+1;q[i].r=q[i].r+1;q[i].id=i;}sort(q+1,q+1+Q,cmp);cur=1;for(i=1;i<=Q;i++){//cout<<a[cur].val<<" "<<cur<<" "<<q[i].h<<endl;for(;cur<=n&&a[cur].val<=q[i].h;){//cout<<"!!"<<endl;add(a[cur].id,1);//cout<<"!!!"<<endl;cur++;}ans[q[i].id]=sum(q[i].r)-sum(q[i].l-1);//cout<<"!!!!"<<endl;}printf("Case %d:\n",++cas);for(i=1;i<=Q;i++)printf("%d\n",ans[i]);}
}

hdu 4417 树状数组查询区间不是1到n时需要转换,例[0,5]变成[1,6]相关推荐

  1. hdu 4417(树状数组+离线算法)

    解题思路:这道题要求某区间内比h小的个数,其实这里可以类似于树状数组求逆序数那样.关键是如何转换成树状数组的模型,这才是本题的难点. 我们首先分析,如果知道h在该区间的哪个位置,那么剩下的就很好做了. ...

  2. 树状数组之区间修改单点查询

    树状数组的区间修改单点查询 树状数组其实本质还单点修改区间查询,但是我们怎么延伸到这个呢,我们建立一个差分数组, 比如:                a[10]={4, 6, 7, 5, 1, 6, ...

  3. 树状数组的区间修改+查询

    首先看树状数组是用来求前缀和比较方便的一种数据结构 sum[i] = Sigma a[i] =Sum(bit[x]) 而区间修改也不难实现 就是引入一个差分数组del del[i]表示对i~n的修改 ...

  4. 树状数组求区间和模板 区间可修改 参考题目:牛客小白月赛 I 区间

    从前有个东西叫树状数组,它可以轻易实现一些简单的序列操作,比如单点修改,区间求和;区间修改,单点求值等. 但是我们经常需要更高级的操作,比如区间修改区间查询.这时候树状数组就不起作用了,只能选择写一个 ...

  5. 二维树状数组模板(区间修改+区间查询)

    二维树状数组模板(区间修改+区间查询) 例题:JOIOI上帝造题的七分钟 一共两种操作: \(L\ x_1\ y_1\ x_2\ y_2\ d\):把\((x_1,y_1)\),\((x_2,y_2) ...

  6. 【LuoguP3038/[USACO11DEC]牧草种植Grass Planting】树链剖分+树状数组【树状数组的区间修改与区间查询】...

    模拟题,可以用树链剖分+线段树维护. 但是学了一个厉害的..树状数组的区间修改与区间查询.. 分割线里面的是转载的: ----------------------------------------- ...

  7. 树状数组维护区间和的模型及其拓广的简单总结

    by wyl8899 树状数组的基本知识已经被讲到烂了,我就不多说了,下面直接给出基本操作的代码. 假定原数组为a[1..n],树状数组b[1..n],考虑灵活性的需要,代码使用int *a传数组. ...

  8. HDU-4777 Rabbit Kingdomom(树状数组、区间离线)

    title: HDU-4777 Rabbit Kingdomom(树状数组.区间离线) date: 2018-12-14 11:20:15 tags: [树状数组,离线,区间] categories: ...

  9. 牛客练习赛52.Galahad(树状数组维护区间不相同数的和)

    链接:https://ac.nowcoder.com/acm/contest/1084/B 来源:牛客网 Galahad 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K ...

最新文章

  1. GBK和UTF-8之间的战争,websphere6.1乱码解决方案
  2. python counter函数定义_分享几个自己常用的Python高级函数
  3. English trip M1 - AC6 How to make salad? Teacher:Patrick
  4. 【PhotoScan精品教程】任务二:刺像控点,平差,质量报告精度检查,像控点POS权重调配
  5. java args eclipse_不会在eclipse中运行含有args[]参数的Java代码,求指导
  6. 混合编程:如何用pybind11调用C++
  7. java 数组 转set_java中的list,set,数组之间的转换
  8. 微软物联网平台再推新!
  9. 分布式时序数据库InfluxDB
  10. Java基础学习(3)-泛型
  11. 来料不良,只是采购一人的事吗?
  12. 获取115网盘文件列表
  13. python控制电机正反转_树莓派Python控制步进电机
  14. c++语言里平方根值函数,函数式编程之函数定义与使用(以scala语言为例)
  15. Logistic-Sine-Cosine混沌映射(提供文献及Matlab代码)
  16. 论AI在叮咚智能音箱中的演进和应用
  17. Python 给视频添加水印
  18. 【C语言快速上手】带你了解C语言,零基础入门①
  19. Cocos2d-x 窗口大小调整
  20. ListViewItem实现listview中条目的显示控制

热门文章

  1. war包启动命令_【漏洞预警】Oracle WebLogic远程命令执行0day漏洞(CVE20192725补丁绕过)...
  2. 班尼机器人怎么语音_每日一句中话西说巧学英语:“我们今天就到这儿吧。”英语怎么说?...
  3. python与office结合可以干什么-震惊!当Python遇到Excel后,将开启你的认知虫洞
  4. python爬虫步骤-黑客基础 编写Python爬虫入门步骤
  5. 普通人学python有意义吗-普通人为什么要学习Python?
  6. python软件下载百度云-python电子书学习资料打包分享百度云资源下载
  7. python培训班靠谱吗-python培训机构靠谱吗?python培训班
  8. python的优点有哪些-Python为何这么火,究竟有哪些优势?
  9. |ViaVoice(IBM语音识别输入系统)下载v9.1官方版 - 欧普软件下载
  10. 三星S8折戟语音识别,靠拿来主义和自主研发仍难有起色