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个区间.每个区间可以表示为 ...
随机推荐
- DrawTool画笔之图形笔
相关知识参考DrawTool画笔之纹理笔 , 图形笔的实现跟纹理笔的实现是一样的,重载Stroke的DrawCore方法,效果图: --------------------------------- ...
- 推荐一个sqlce,sqllite等数据库管理工具
推荐一个sqlce,sqllite等数据库管理工具 下载地址: http://fishcodelib.com/files/DatabaseNet4.zip 支持sqlserver,sqlce, sql ...
- Hello World程序
本文最初发表于2015-8-??,是由别的地方迁移过来的 本文利用改写内存的办法在屏幕中央显示“Hello world”字符串. 首先我们需要了解80*25彩色字符模式显示缓冲区的结构. 〉〉内存中B ...
- 【转】IT领域技能图谱
- Android Service学习之本地服务
Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个Service必须在manifest中 通过来声明.可以通过contect.startservice和contect.bindse ...
- 5.Knockout.Js(自定义绑定)
前言 你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定义很容易使用和重用的绑定.例如,你可以在form表单里自定义像grid ...
- minihttp http://www.acme.com/software/mini_httpd/
1.安装mini_httpd 1.1把下载的mini_httpd-1.19.tar.gz拷贝到根目录 1.2 解压tar -xvfzmini_httpd-1.19.tar.gz ,会在根目录产生一 ...
- java 切换
Android L之后推荐使用JDK7编译程序,这是自然发展规律,就像是4年前编译Android 1.6需要使用JDK5一样. 多版本JDK是可以共存的,只需要使用update-alternative ...
- sharepoint 2010 找不到搜索不到ad里的用户
前提条件: 1.这个用户是在ad中存在的. 2.这个用户也同步到了userprofile中. 问题现象: 在sharepoint的人员选择器中,搜索不到已经添加的用户. 可能原因: 1.有人说需要将 ...
- LoadRunner - 实战,转发
最近几天一直在读代震军的博客,他是Discuz!NT的设计者,读了他的一系列关于 Discuz!NT的架构设计文章,大呼过瘾,特别是Discuz!NT在解决高访问高并发时所设计的一系列方案,本人尤其感 ...