hdu 4417 主席树
来源:互联网 发布:复制文件夹网络共享 编辑:程序博客网 时间:2024/05/18 00:10
题目链接:点击打开链接
解题思路:将数组去重离散化,建成一颗线段树,那么我们只要去找H的排名就可以用第r颗树减去第l颗树的(0-H)的区间数就可以了
#include<bits/stdc++.h>#define lson l,mid#define rson mid+1,rusing namespace std;typedef long long ll;int n,m;const int mx =1e5+10;int num[mx],root[mx],so[mx];int ls[20*mx],rs[20*mx],sum[20*mx],size;void update(int x,int &y,int l,int r,int M,int v){ y = ++size; ls[y] = ls[x],rs[y] = rs[x],sum[y] = sum[x] + v; int mid = (l+r)>>1; if(l==r) return ; if(M<=mid) update(ls[x],ls[y],lson,M,v); else update(rs[x],rs[y],rson,M,v);}int query(int x,int l,int r,int M){ if(r<=M) return sum[x]; int mid = (l+r)>>1; int ans = query(ls[x],lson,M); if(M>mid) ans += query(rs[x],rson,M); return ans;}int main(){ int t,cas = 1; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d",num+i); so[i] = num[i]; } size = 0; memset(sum,0,sizeof(sum)); sort(so+1,so+1+n); int k = 1,L,R,H; for(int i=2;i<=n;i++) if(so[i]!=so[i-1]) so[++k] = so[i]; for(int i=1;i<=n;i++){ int p = lower_bound(so+1,so+1+k,num[i])-so; update(root[i-1],root[i],1,k,p,1); } printf("Case %d:\n",cas++); for(int i=1;i<=m;i++){ scanf("%d%d%d",&L,&R,&H); int p = upper_bound(so+1,so+1+k,H)-so; p--; if(!p) puts("0"); else printf("%d\n",query(root[R+1],1,k,p)-query(root[L],1,k,p)); } } return 0;}
阅读全文
0 0
- HDU 4417 主席树
- HDU 4417 (主席树)
- HDU 4417 主席树
- hdu 4417 主席树
- 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 4866 主席树
- hdu 4348 主席树
- hdu 5756(主席树)
- hdu 5919 主席树
- HDU 4605 (主席树)
- HDU 5919 主席树
- HDU 4605 主席树
- 【HDU】4866 Shooting 主席树
- csp ccf输入字符串的坑-2017 9 第三题json字符串处理
- 成员初始化列表
- redis部署和主从配置
- python第一章 基础入门以及一些简单实例
- 公钥,私钥,数字签名,证书
- hdu 4417 主席树
- 3、Tensorflow:TensorFlow深度学习入门(下)
- HashSet,TreeSet,LinkedSet的区别
- python基本数据类型2
- 循环链表
- 【转载】如何转载文章
- java服务相关概念
- linux冒险位和强制位
- Android系统广播大全