HDU 4417 Super Mario ( 离线树状数组 )
把数值和查询放在一起从小到大排序,纪录每个数值的位置,当遇到数值时就更新到树状数组中,遇到查询就直接查询该区间和。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm> using namespace std; const int MAXN = ; struct node
{
int id;
int L, R;
int val;
} qq[MAXN]; int N, Q;
int cntQ;
int ans[MAXN/];
int C[MAXN]; bool cmp( const node& a, const node& b )
{
if ( a.val == b.val ) return a.id < b.id;
return a.val < b.val;
} int lowbit( int x )
{
return (-x)&x;
} void Update( int x, int v )
{
for ( int i = x; i <= N; i += lowbit(i) )
C[i] += v;
return;
} int Query( int x )
{
int res = ;
for ( int i = x; i > ; i -= lowbit(i) )
res += C[i];
return res;
} int main()
{
int T, cas = ;
scanf( "%d", &T );
while (T--)
{
scanf( "%d%d", &N, &Q );
memset( C, , sizeof(int)*(N+) );
cntQ = ;
for ( int i = ; i < N; ++i )
{
scanf( "%d", &qq[cntQ].val );
qq[cntQ].L = i + ;
qq[cntQ++].id = -;
} for ( int i = ; i < Q; ++i )
{
scanf( "%d%d%d", &qq[cntQ].L, &qq[cntQ].R, &qq[cntQ].val );
++qq[cntQ].L, ++qq[cntQ].R;
qq[cntQ++].id = i;
} sort( qq, qq + cntQ, cmp ); for ( int i = ; i < cntQ; ++i )
{
if ( qq[i].id == - ) Update( qq[i].L, );
else
ans[ qq[i].id ] = Query( qq[i].R ) - Query( qq[i].L- );
} printf( "Case %d:\n", ++cas );
for ( int i = ; i < Q; ++i )
printf( "%d\n", ans[i] );
}
return ;
}
也可以用在线划分树做……
HDU 4417 Super Mario ( 离线树状数组 )的更多相关文章
- HDU 4417 - Super Mario ( 划分树+二分 / 树状数组+离线处理+离散化)
题意:给一个数组,每次询问输出在区间[L,R]之间小于H的数字的个数. 此题可以使用划分树在线解决. 划分树可以快速查询区间第K小个数字.逆向思考,判断小于H的最大的一个数字是区间第几小数,即是答案. ...
- HDU 4417 Super Mario(划分树)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 4417 Super Mario(划分树问题求不大于k的数有多少)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 4417 Super Mario 离线线段树
思路:将点按值从小到大排序,询问按h从小到大排序. 在建立线段树,按h的大小更新树并得到该次查询的结果! 代码如下: #include<iostream> #include<stdi ...
- HDU 4417 Super Mario 主席树
分析:找一个区间里小于等于h的数量,然后这个题先离散化一下,很简单 然后我写这个题主要是熟悉一下主席树,其实这个题完全可以离线做,很简单 但是学了主席树以后,我发现,在线做,一样简单,而且不需要思考 ...
- HDU 4417 Super Mario 主席树查询区间小于某个值的个数
#include<iostream> #include<string.h> #include<algorithm> #include<stdio.h> ...
- HDU 4417 Super Mario(划分树+二分)
题目链接 #include <cstdio> #include <cstring> #include <algorithm> using namespace std ...
- hdu 4638 Group(离线+树状数组)
Group Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU 4417 离线+树状数组
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
随机推荐
- matlab 大块注释和取消注释的快捷键
matlab 大块注释和取消注释的快捷键 注释:Ctrl+R 取消注释:Ctrl +T
- java获取文件后缀名(正则表达式)+文件名
String fileName="asadas.jsp"; String reg = ".+(.JPEG|.jpeg|.JPG|.jpg|.png|.PNG)$" ...
- 旧文备份:安装cygwin及在console下输入和显示中文
1.下载Cygwin.exe文件,双击安装,首先在"Choose A Download Source"的时候选择"Download Without Installing& ...
- SpringBoot中使用配置文件
一般都是把xml配置文件转换为@Bean的模式,如果非要使用xml配置文件,方式如下: /** * 将配置文件引入springboot */ @Configuration @ImportResourc ...
- 在c#中using和new这两个关键字有什么意义?
在c#中using和new这两个关键字有什么意义?答:using 引入名称空间或者使用非托管资源, new 新建实例或者隐藏基类方法
- Webpack4 学习笔记四 暴露全局变量、externals
前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 webpack 暴露全局变量 通过 expose-loader 内联配置 在 webpack中配置 每个模块通过注入的方式 通过CD ...
- lincode 680 Split String
Split String 描述 笔记 数据 评测 Give a string, you can choose to split the string after one character or ...
- java 微信开发 常用工具类(xml传输和解析 json转换对象)
与微信通信常用工具(xml传输和解析) package com.lownsun.wechatOauth.utl; import java.io.IOException; import java.io. ...
- PHP关闭notice级别的错误提示
1.在php.ini文件中改动error_reporting改为: error_reporting=E_ALL & ~E_NOTICE 2.如果你不能操作php.ini文件,你可以使用如下方法 ...
- protues7.5安装
win8 + protues7.5的安装 首先找到解压的文件夹,然后按照一步一步安装,如果中间出现不一样的,请退到前一步重新安装, 注意,安装的目录不要出现中文路径.