UPC 2224 Boring Counting (离线线段树,统计区间[l,r]之间大小在[A,B]中的数的个数)
题目链接: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]中的数的个数)的更多相关文章
- UPC 2224 Boring Counting ★(山东省第四届ACM程序设计竞赛 tag:线段树)
[题意]给定一个长度为N的数列,M个询问区间[L,R]内大于等于A小于等于B的数的个数. [题目链接]http://acm.upc.edu.cn/problem.php?id=2224 省赛的时候脑抽 ...
- 主席树——求区间[l,r]不同数字个数的模板(向左密集 D-query)
主席树的另一种用途,,(还有一种是求区间第k大,区间<=k的个数) 事实上:每个版本的主席树维护了每个值最后出现的位置 这种主席树不是以权值线段树为基础,而是以普通的线段树为下标的 /* 无修改 ...
- 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 ...
- 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)
HDU 5861 题意 在n个村庄之间存在n-1段路,令某段路开放一天需要交纳wi的费用,但是每段路只能开放一次,一旦关闭将不再开放.现在给你接下来m天内的计划,在第i天,需要对村庄ai到村庄bi的道 ...
- hdu 1754 I Hate It (线段树求区间最值)
HDU1754 I Hate It Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u D ...
- BZOJ 3626 [LNOI2014]LCA 树剖+(离线+线段树 // 在线+主席树)
BZOJ 4012 [HNOI2015]开店 的弱化版,离线了,而且没有边权(长度). 两种做法 1 树剖+离线+线段树 这道题求的是一个点zzz与[l,r][l,r][l,r]内所有点的lcalca ...
- hdu 4288 离线线段树+间隔求和
Coder Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- bzoj2333 离线 + 线段树
https://www.lydsy.com/JudgeOnline/problem.php?id=2333 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来 ...
- HDU 5700 区间交 离线线段树
区间交 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5700 Description 小A有一个含有n个非负整数的数列与m个区间.每个区间可以表示为 ...
随机推荐
- 菜鸟学习Spring——60s使用annotation实现简单AOP
一.概述. AOP大家都知道切面编程,在Spring中annotation可以实现简单的AOP列子.下面还未大家介绍几个概念: Aspect 对横切性关注点的模块化. Advice 对横切性关注点的具 ...
- eclipse java.lang.OutOfMemoryError: Java heap space
1.手动编译运行需要添加 java -Xms256m -Xmx1024m classname 2.在eclipse中,在run as -> run configurations -> ar ...
- Android开发遇到的异常及解决办法
Android开发遇到的错误及解决方法1. Unable to resolve target 'android-7' 解决方案: 修改工程目录下的default.properties文件里的内容tar ...
- JavaScript高级程序设计之基本包装类型
为便于操作基本类型值,ECMAScript提供了3个特殊的引用类型:Boolean, Number 和 String // 字符串怎么会有方法呢 var str1 = "some text& ...
- 004--VS C++ 绘制封闭图形
//全局变量HPEN hPen;HBRUSH hBru[4];int sBru[4] = { HS_VERTICAL, HS_HORIZONTAL, HS_CROSS, HS_DIAGCROSS }; ...
- iOS 进阶 第十七天(0420)
0420 凡是继承了UIResponder的类都可以做响应者 响应事件的传递是由底到高来传递,响应者链条是由高到底来响应 相应事件的传递(由底到高 找到正在和用户触摸交互的view) 准则:事件由父控 ...
- < java.util >-- Set接口
Set接口中的方法和Collection中方法一致的.Set接口取出方式只有一种,迭代器. |--HashSet:底层数据结构是哈希表,线程是不同步的.无序,高效: HashSet集合保证元素唯一性: ...
- JNA开发中的问题积累
[Qboy原创] 2013年12月28日 在开发一个项目过程中需要调用第三方的C的dll.由于是第一次在项目中使用JNA,很多都安装开发文档来做,但是出现了很多的问题. 由于很多接口还没调完,还不知道 ...
- Hadoop TextInputFormat源码分析
from:http://blog.csdn.net/lzm1340458776/article/details/42707047 InputFormat主要用于描述输入数据的格式(我们只分析新API, ...
- j2SE基回顾(一)
1. 九种基本数据类型的大小,以及他们的封装类. 2. Switch能否用string做参数? 3. equals与==的区别. 4. Object有哪些公用方法? Object是所有类的父类,任何类 ...