HDU 4417 【线段树+离线处理】
http://acm.hdu.edu.cn/showproblem.php?pid=4417
题意:找出给定区间内,有多少个数小于等于给定的数。用线段树维护的话会超时,要用到线段树的离线操作,对询问与数列都进行从小到大的排序,记录下标。从第一个询问开始,遍历数列,满足小于等于就插入到线段树中相应的位置。答案即为当前线段树中有多少个值。转换成了区间和,记录答案,最后一遍输出。
代码如下:
#include<stdio.h>
#include<algorithm>
const int MAXN = 1e5 + ;
using namespace std; int n, m;
int ANS[MAXN]; struct Node
{
int id, h;
}node[MAXN];
bool cmp1(Node a, Node b)
{
return a.h < b.h;
} struct Tree
{
int l, r, num;
}t[MAXN * ]; struct Query
{
int l, r, limit, id;
}q[MAXN];
bool cmp2(Query a, Query b)
{
return a.limit < b.limit;
} void build(int l, int r, int k)
{
t[k].l = l, t[k].r = r, t[k].num = ;
if(l == r)
return ;
int mid = (l + r) / ;
build(l, mid, * k);
build(mid + , r, * k + );
} void up_date(int id, int k)
{
if(t[k].l == t[k].r)
{
t[k].num = ;
return ;
}
int mid = (t[k].l + t[k].r) / ;
if(id <= mid)
up_date(id, * k);
else
up_date(id, * k + );
t[k].num = t[ * k].num + t[ * k + ].num;
} int query(int f_l, int f_r, int k)
{
if(f_l <= t[k].l && f_r >= t[k].r)
return t[k].num;
int mid = (t[k].l + t[k].r) / ;
if(f_l > mid)
return query(f_l, f_r, * k + );
else if(f_r <= mid)
return query(f_l, f_r, * k);
else
{
return query(f_l, mid, * k) + query(mid + , f_r, * k + );
}
} int main()
{
int T, k = ;
scanf("%d", &T);
while(T --)
{
scanf("%d%d", &n, &m);
build(, n, );
for(int i = ; i <= n; i ++)
{
scanf("%d", &node[i].h);
node[i].id = i;
}
sort(node + , node + + n, cmp1);
// for(int i = 1; i <= n; i ++)
// printf("%d\n", node[i].h);
printf("Case %d:\n", k ++);
for(int i = ; i <= m; i ++)
{
scanf("%d%d%d", &q[i].l, &q[i].r, &q[i].limit);
q[i].l ++, q[i].r ++;
q[i].id = i;
}
sort(q + , q + + m, cmp2);
int j = ;
for(int i = ; i <= m; i ++)
{
while(node[j].h <= q[i].limit && j <= n)
{
up_date(node[j].id, );
j ++;
}
ANS[q[i].id] = query(q[i].l, q[i].r, );
}
for(int i = ; i <= m; i ++)
printf("%d\n", ANS[i]);
}
return ;
}
HDU 4417 【线段树+离线处理】的更多相关文章
- J - Super Mario HDU - 4417 线段树 离线处理 区间排序
J - Super Mario HDU - 4417 这个题目我开始直接暴力,然后就超时了,不知道该怎么做,直接看了题解,这个习惯其实不太好. 不过网上的思路真的很厉害,看完之后有点伤心,感觉自己应该 ...
- hdu 4288 线段树+离线+离散化
http://acm.hdu.edu.cn/showproblem.php?pid=4288 開始的时候,果断TLE,做的方法是,线段树上只维护%5==3的坐标,比方1 2 3 4 5 6 7 假设 ...
- hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu 3974 线段树 将树弄到区间上
Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 3436 线段树 一顿操作
Queue-jumpers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- hdu 3397 线段树双标记
Sequence operation Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 4578 线段树(标记处理)
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others) ...
- hdu 4533 线段树(问题转化+)
威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- hdu 2871 线段树(各种操作)
Memory Control Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 4052 线段树扫描线、奇特处理
Adding New Machine Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
随机推荐
- 桥接模式(Bridge)---结构型
1 基础知识 定义:将抽象部分与它的具体实现部分分离,使得它们都可以独立变化.特征:通过组合的方式建立两个之间的联系而不是继承. 使用场景:抽象和具体实现之间增加更多的灵活性:一个类存在两个(多个)独 ...
- blur([[data],fn]) 当元素失去焦点时触发 blur 事件。
blur([[data],fn]) 概述 当元素失去焦点时触发 blur 事件.大理石平台生产厂 这个函数会调用执行绑定到blur事件的所有函数,包括浏览器的默认行为.可以通过返回false来防止触发 ...
- Codevs 1404 字符串匹配(Kmp)
1404 字符串匹配 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的 ...
- Mysql 修改最大链接数
链接数过小经常出现ERROR 1040: Too many connections错误 show variables like '%max_connections%'; 查看当前的mysql链接值 ...
- Linux网络编程六、报文解析(1)
一.pcap文件解析 依赖的库:libpcap,头文件:pcap/pcap.h 获取pcap文件:tcpdump,-i:指定监听接口,默认配置好的最小的号码的接口.-w:指定存入文件,将原始报文存入指 ...
- golang精选100题带答案
能力模型 级别 模型 初级 primary 熟悉基本语法,能够看懂代码的意图: 在他人指导下能够完成用户故事的开发,编写的代码符合CleanCode规范: 中级 intermediate 能够独立完成 ...
- Zookeeper系列(十四)Zookeeper的数据与存储
作者:leesf 掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6179118.html尊重原创,奇文共欣赏: 一.前言 前 ...
- git上传超过100m大文件
1.git出错如下错误时 执行如下可解决错误: git rm --cache '大文件路径' git commit --amend -CHEAD git push 2.当必须上传大文件时.需借助git ...
- 【软件工程】Alpha冲刺 (6/6)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 tomcat的学习与实现 服务器后端部署,API接口的beta版实现 后端代码 ...
- 黑马vue---16、vue中通过属性绑定为元素设置class类样式
黑马vue---16.vue中通过属性绑定为元素设置class类样式 一.总结 一句话总结: 这里就是为元素绑定class样式,和后面的style样式区别一下 vue中class样式绑定方式的相对于原 ...