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 【线段树+离线处理】的更多相关文章

  1. J - Super Mario HDU - 4417 线段树 离线处理 区间排序

    J - Super Mario HDU - 4417 这个题目我开始直接暴力,然后就超时了,不知道该怎么做,直接看了题解,这个习惯其实不太好. 不过网上的思路真的很厉害,看完之后有点伤心,感觉自己应该 ...

  2. hdu 4288 线段树+离线+离散化

    http://acm.hdu.edu.cn/showproblem.php?pid=4288 開始的时候,果断TLE,做的方法是,线段树上只维护%5==3的坐标,比方1 2 3 4 5 6 7  假设 ...

  3. 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 ...

  4. hdu 3974 线段树 将树弄到区间上

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. hdu 3436 线段树 一顿操作

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  6. hdu 3397 线段树双标记

    Sequence operation Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. hdu 4578 线段树(标记处理)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others) ...

  8. hdu 4533 线段树(问题转化+)

    威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  9. hdu 2871 线段树(各种操作)

    Memory Control Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  10. hdu 4052 线段树扫描线、奇特处理

    Adding New Machine Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

随机推荐

  1. off(events,[selector],[fn]) 在选择元素上移除一个或多个事件的事件处理函数。

    off(events,[selector],[fn]) 概述 在选择元素上移除一个或多个事件的事件处理函数. off() 方法移除用.on()绑定的事件处理程序.有关详细信息,请参阅该网页上deleg ...

  2. 如何打开Mac OSX 终端的颜色

    如何打开Mac OSX 终端的颜色 听语音 | 浏览:8453 | 更新:2015-12-15 16:48 1 2 3 4 5 6 7 分步阅读 Mac 终端默认颜色很单一,文件夹和文件无法区分,可以 ...

  3. luogu 1373 小a和uim之大逃离 dp

    有取模操作,所以直接维护模意义下的差即可. Code: #include <bits/stdc++.h> #define M 16 #define N 801 #define ll lon ...

  4. 彩色模型,CIE XYZ,CIE RGB

    学习DIP第8天 转载请标明出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意. ...

  5. c++中类的初次接触

    下面是我写的简单的代码,初次接触c++中的类,c++真的是博大精深啊,学习c++的路还很长,加油! /*q1.cpp*/ //一个简单的类极其实例化 #include<iostream> ...

  6. CodeForces 519D A and B and Interesting Substrings ——(奥义字符串)

    题意:给出26个字母每个字母的价值,问字符串中有多少个满足以下条件的子串: 1.子串的第一个和最后一个相同 2.子串除了头和尾的其他字符的价值加起来和尾0 这题普通方法应该是O(n^2),但是在1e5 ...

  7. 使用Spring基于应用层实现读写分离(一)基础版

    背景 我们一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较大,有一个思路就是说采用数据库集群的方案, 其中一个是主库,负责写入数据,我们称之为:写库: 其它都是从库,负责读取数据 ...

  8. webstorm设置babel,使用es6

    原文链接:https://blog.csdn.net/peade/article/details/76522177 网上有很多关于如何设置babel的.我学习着设置,但总差那么几步,没能满足我的需求. ...

  9. HTTP之Cookie和Session

    1. Cookie 1.1 为什么需要 Cookie? HTTP 协议是一种无状态的协议,也就是说,当前的 HTTP 请求与以前的 HTTP 请求没有任何联系.显然,这种无状态的情形在某些时候将让用户 ...

  10. 外网访问内网的FTP服务器

    转自 外网访问内网的FTP服务器 首先感谢作者给出的总结,原文是介绍Serv-U的,我针对FileZilla Server进行了稍微修改,仅看操作可直接跳到分割线后第3部分. 1. 背景简介最近研究如 ...