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 ...
随机推荐
- ansible API 常用模块
常用模块 用于读取yaml,json格式的文件 from ansible.parsing.dataloader import DataLoader #用于管理变量的类,包括主机,组,扩展等变量 fro ...
- nginx之location部署yii项目(不使用nginx端口转发)
前言: 之前部署yii项目的时候, 使用的是域名, 后来使用nginx进行端口转发(反向代理)来部署yii项目. 这一次部署尝试只使用location 进行部署(不需要使用端口). 先贴出nginx的 ...
- hdu 1133 卡特兰 高精度
Buy the Ticket Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- 【csp模拟赛3】组合数学
思路: 先排序,取最大的在剩余左边任意找k-1个数,所以是排列组合,费马小定理求逆元,预处理阶乘,注意要取模.. 代码: #include<cstdio> #include<iost ...
- openstack导入镜像
本文以制作CentOS7.2镜像为例,详细介绍手动制作OpenStack镜像详细步骤,解释每一步这么做的原因.镜像上传到OpenStack glance,支持以下几个功能: 支持密码注入功能(nova ...
- Linux+CLion+树莓派远程编译时,Cmake编译出现undefined reference to 'pthread_create'的解决办法
在CLion中开发讯飞的linux语音库时编译出现以下问题: undefined reference to 'pthread_create' CLion的cmake配置:修改CMakeLists.tx ...
- LVS集群之IP TUN模式以及网站压力测试
今天来看一下LVS的第三种模式IP TUN. TUN方式,是通过给数据包加上新的IP头部来实现,这个可以跨整个广域网. 环境: 主机名 IP 系统 角色 tiandong63 RIP:192.168. ...
- ARTS打卡计划第十五周
Algorithms: https://leetcode-cn.com/problems/single-number/submissions/ Review: “What Makes a Good D ...
- 2个最好的JavaScript编辑器 必须要知道
JavaScript程序员有许多很好的工具可供选择,几乎太多了.在这篇文章中,介绍2个最好用的文本编辑器,也是顶级的.并且很好地支持使用JavaScript,HTML5和CSS进行开发,并用Markd ...
- 2018icpc 徐州h题
题目大意: https://codeforces.com/gym/102012/problem/H?csrf_token=c9d0191a64a241166d54a565b1615125 区间[l , ...