题目链接:http://acm.upc.edu.cn/problem.php?id=2224

题意:给出n个数pi,和m个查询,每个查询给出l,r,a,b,让你求在区间l~r之间的pi的个数(A<=pi<=B,l<=i<=r)。

参考链接:http://www.cnblogs.com/zj62/p/3558967.html

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#define lson rt<<1,L,mid
#define rson rt<<1|1,mid+1,R
/*
http://acm.upc.edu.cn/problem.php?id=2224
*/
using namespace std;
const int maxn=+;
const int INF=0x3f3f3f3f;
int n,m;
int tree[maxn<<];
int ans[maxn][];
/*ans[i][0]记录第i个查询区间中比a小的数的个数,ans[i][1]记录第i个查询中比b小的数的个数,答案为ans[i][1]-ans[i][0]*/ struct Num{
int value;
int idx;
bool operator<(const Num tmp)const{
return value<tmp.value;
}
}num[maxn]; struct Query{
int l,r,a,b;
int idx;
}q[maxn]; bool cmp1(const Query tmp1,const Query tmp2){
return tmp1.a<tmp2.a;
}
bool cmp2(const Query tmp1,const Query tmp2){
return tmp1.b<tmp2.b;
} void build(int rt,int L,int R){
tree[rt]=;
if(L==R){
return;
}
int mid=(L+R)>>;
build(lson);
build(rson);
} void update(int rt,int L,int R,int x){
if(L==R){
tree[rt]++;
return;
}
int mid=(L+R)>>;
if(x<=mid)
update(lson,x);
else
update(rson,x);
tree[rt]=tree[rt<<]+tree[rt<<|];
} int query(int rt,int L,int R,int l,int r){
if(l<=L&&R<=r){
return tree[rt];
}
int mid=(L+R)>>;
int ret=;
if(l<=mid)
ret+=query(lson,l,r);
if(r>mid)
ret+=query(rson,l,r);
return ret;
} void solve(){
sort(num+,num+n+);
sort(q+,q+m+,cmp1);
build(,,n);
int d=;
for(int j=;j<=m;j++){
while(d<=n && num[d].value<q[j].a){
update(,,n,num[d].idx);
d++;
}
ans[q[j].idx][]=query(,,n,q[j].l,q[j].r);
}
sort(q+,q+m+,cmp2);
build(,,n);
d=;
for(int j=;j<=m;j++){
while(d<=n && num[d].value<=q[j].b){
update(,,n,num[d].idx);
d++;
}
ans[q[j].idx][]=query(,,n,q[j].l,q[j].r);
} }
int main()
{
int t,cases=;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&num[i].value);
num[i].idx=i;
}
for(int i=;i<=m;i++){
scanf("%d%d%d%d",&q[i].l,&q[i].r,&q[i].a,&q[i].b);
q[i].idx=i;
}
solve();
printf("Case #%d:\n",++cases);
for(int i=;i<=m;i++){
printf("%d\n",ans[i][]-ans[i][]);
}
}
return ;
}

UPC 2224 Boring Counting (离线线段树,统计区间[l,r]之间大小在[A,B]中的数的个数)的更多相关文章

  1. UPC 2224 Boring Counting ★(山东省第四届ACM程序设计竞赛 tag:线段树)

    [题意]给定一个长度为N的数列,M个询问区间[L,R]内大于等于A小于等于B的数的个数. [题目链接]http://acm.upc.edu.cn/problem.php?id=2224 省赛的时候脑抽 ...

  2. 主席树——求区间[l,r]不同数字个数的模板(向左密集 D-query)

    主席树的另一种用途,,(还有一种是求区间第k大,区间<=k的个数) 事实上:每个版本的主席树维护了每个值最后出现的位置 这种主席树不是以权值线段树为基础,而是以普通的线段树为下标的 /* 无修改 ...

  3. Codeforces VK Cup 2015 - Qualification Round 1 D. Closest Equals 离线线段树 求区间相同数的最小距离

    D. Closest Equals Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/prob ...

  4. 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)

    HDU 5861 题意 在n个村庄之间存在n-1段路,令某段路开放一天需要交纳wi的费用,但是每段路只能开放一次,一旦关闭将不再开放.现在给你接下来m天内的计划,在第i天,需要对村庄ai到村庄bi的道 ...

  5. hdu 1754 I Hate It (线段树求区间最值)

    HDU1754 I Hate It Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u D ...

  6. BZOJ 3626 [LNOI2014]LCA 树剖+(离线+线段树 // 在线+主席树)

    BZOJ 4012 [HNOI2015]开店 的弱化版,离线了,而且没有边权(长度). 两种做法 1 树剖+离线+线段树 这道题求的是一个点zzz与[l,r][l,r][l,r]内所有点的lcalca ...

  7. hdu 4288 离线线段树+间隔求和

    Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  8. bzoj2333 离线 + 线段树

    https://www.lydsy.com/JudgeOnline/problem.php?id=2333 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来 ...

  9. HDU 5700 区间交 离线线段树

    区间交 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5700 Description 小A有一个含有n个非负整数的数列与m个区间.每个区间可以表示为 ...

随机推荐

  1. matlab封装DLL混合编程总结

    最近做了个项目要用到matlab做些算法处理,然后用.net项目调用这个类,我把这个matlab封装dll总结了下如下: matlab是商业数学软件,优势是在算法开发上面有很强的功能,提供了很多数学算 ...

  2. 使用ImageLoader实现图片异步加载

    注:下面使用的是包:1.8.4,其他版本包的,DisplayImageOptions defaultOptions和 ImageLoaderConfiguration config2配置不一样,请看官 ...

  3. Go原子计数

    通过原子计数可以在多线程情况下,对同一个数值进行加减操作,一般用于状态同步. 先看代码: package main import "fmt" import "time&q ...

  4. 用cmd命令合并N个文件

    今天早上朋友发我一篇小说(42个TXT文件),让我给他合并为一个文件.我首先想到的是“Copy”命令,它可以复制文件,也可以合并文件. 例如:合并1.txt和2.txt到12.txt(其为ASCII文 ...

  5. PBOC2.0与3.0的区别

    一.PBOC规范颁布的历程 1997年12月,PBOC V1.0  定义了五个方面的事项  电子钱包/电子存折应用(EP,ED)  卡片和终端的接口  卡片本身的技术指标  应用相关的交易流程  终端 ...

  6. C++中的抽象类及纯虚函数的实现与否

    1.含有纯虚函数的叫抽象类 2.抽象类(一般是基类)中的纯虚函数无论函数体实现与否,都没有关系,系统会自动忽略 3.继承自抽象类的子类,必须要实现父类的纯虚函数才可以实例化对象 4.抽象类不允许实例化 ...

  7. CoffeeRobotTeam项目组报告

    一.小组分工 模块 任务 责任人 备注 报告 需求分析 熊振威 功能分析 熊振威 项目报告 熊振威 人机界面 秦勤.洪超 单元测试 姜进.张文强 机器人代码 机器人类 徐意.余拥军.孙智博 机器人运动 ...

  8. 学习Linux第三天

    1.常用的命令: reset 清屏 leave +hhmm 建立离开提醒 sudo apt-get yum 安装yum程序 sudo su 切换root身份 see test.c 可以直接查看文件,神 ...

  9. 单点登录的原理与CAS技术的研究

    1.什么是单点登录? 关于单点登录技术的说明参考文章:http://www.cnblogs.com/yupeng/archive/2012/05/24/2517317.html 一般来说,整个原理大家 ...

  10. 【CentOS】安装chrome

    参考资料:http://www.cnblogs.com/xia520pi/p/3545715.html 问题描述: 出现如下错误: 升级glibc任然无效,最后在博客园:http://www.cnbl ...