title: 牛客小白9 换个角度思考(离线+树状数组)
date: 2018-11-29 15:25:18
tags: [离线,树状数组]
categories: ACM

题目链接

题目描述

给定一个序列,有多次询问,每次查询区间里小于等于某个数的元素的个数
即对于询问 (l,r,x),你需要输出 的值
其中 [exp] 是一个函数,它返回 1 当且仅当 exp 成立,其中 exp 表示某个表达式

输入描述:

第一行两个整数n,m
第二行n个整数表示序列a的元素,序列下标从1开始标号,保证1 ≤ ai ≤ 105
之后有m行,每行三个整数(l,r,k),保证1 ≤ l ≤ r ≤ n,且1 ≤ k ≤ 105

输出描述:

对于每一个询问,输出一个整数表示答案后回车

输入

5 1
1 2 3 4 5
1 5 3

输出

3

备注:

数据范围
1 ≤ n ≤ 105
1 ≤ m ≤ 105

思路

  • 将原数组和要查询的K值升序排列,这样能保证前面小的数的贡献对后面也有影响
  • 然后用树状数组维护
#include <bits/stdc++.h>
#define N 100006
#define mem(a, b) memset(a, b, sizeof(a))
#define LL  long long
#define P pair<int, int>
#define lowbit(x) (x & -x)
using namespace std;struct ac{int val, id, l, r;
}a[N], b[N];
int ans[N], c[N];
int n, m;void update(int x, int d) {while (x <= n) {c[x] += d;x += lowbit(x);}
}int query(int x) {int ans = 0;while (x) {ans += c[x];x -= lowbit(x);}return ans;
}int main() {#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);
#endifscanf("%d %d", &n, &m);// 读入数组,并记录序号for (int i = 0; i < n; ++i) {scanf("%d", &a[i].val);a[i].id = i + 1;}// 读入查询,记录序号for (int i = 0; i < m; ++i) {scanf("%d %d %d", &b[i].l, &b[i].r, &b[i].val);b[i].id = i + 1;}// 分别升序排列sort(a, a + n, [&](const ac &x, const ac &y){return x.val < y.val;});sort(b, b + m, [&](const ac &x, const ac &y){return x.val < y.val;});// j枚举原数组 1-n 的数字int j = 0;for (int i = 0; i < m; ++i) {// 存在小于当前查询的K值,就树状数组更新贡献while (j < n && a[j].val <= b[i].val) {update(a[j].id, 1);++j;}// 将答案按照序号保存在数组中ans[b[i].id] = query(b[i].r) - query(b[i].l - 1);}for (int i = 1; i <= m; ++i) {printf("%d\n", ans[i]);}return 0;
}

牛客小白9 换个角度思考(离线+树状数组)相关推荐

  1. hdu 4605 Magic Ball Game (在线主席树/离线树状数组)

    版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4605 题意: 有一颗树,根节点为1,每一个节点要么有两个子节点,要么没有,每个节点都有一个权值wi .然后,有一个球,附带值x . 球 ...

  2. HDU3333 Turing Tree 离线树状数组

    题意:统计一段区间内不同的数的和 分析:排序查询区间,离线树状数组 #include <cstdio> #include <cmath> #include <cstrin ...

  3. 数据结构一【树状数组】普通、二维、离线树状数组的(单点修改,单点查询,区间修改,区间查询)模板及应用例题总结

    文章目录 树状数组 lowbit 线段树与树状数组 单点修改 区间查询 区间修改 区间求和 二维树状数组 离线树状数组 例题 POJ:stars MooFest [SDOI2009]HH的项链 Tur ...

  4. 【BZOJ3653】谈笑风生 离线+树状数组+DFS序

    [BZOJ3653]谈笑风生 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称"a比b不知道高明到哪里去了&quo ...

  5. bzoj2754:[SCOI2012]喵星球上的点名 (后缀数组+离线+树状数组)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2754 题目分析:最近两个星期都在做数论题,感觉有些无聊.昨天忽然间想起省赛前还有一个这题 ...

  6. [HEOI2012]采花(思维 + 离线 + 树状数组)

    题目链接 分析 我只能说太妙了- 离线 + 树状数组 参考题解: 这个题要和<HH的项链>做对比: 关键就是为什么要离线处理,以及 怎么对区间进行排序和维护: [SDOI2009]HH的项 ...

  7. 2016 UESTC Training for Data Structures K - 郭大侠与甲铁城 CDOJ 1342 离线树状数组

    K - 郭大侠与甲铁城 有一个区间,长度1e5,每个点有一种颜色,颜色属于[1,1000],离线询问某个区间的颜色种树,询问次数也少1e5 我的做法是离线树状数组 首先把区间保存下来,按右端点升序排序 ...

  8. HDU4417 Super Mario(离线树状数组或者主席树+二分)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  9. 牛客小白月赛62 幼稚园的树

    2022.11.25 今晚闲来无事,在zhoj群中看到管理员发布的牛客小白月赛的通知,就和舍友一起参加了. 题目描述 来源:牛客网 牛牛在幼稚园做义工,幼稚园中共有 n n n 颗树,第 1 天中午时 ...

最新文章

  1. python服务端对应多个客户端_Python-网络编程:TCP2 循环为多个客户端服务
  2. Linux中内联函数,Windows 7上的内联函数的doParallel问题(适用于Linux)
  3. 操作系统:Linux 环境变量配置的 6 种方法!
  4. .NET 开源项目 StreamJsonRpc 介绍[中篇]
  5. 人脸识别已OUT?猫脸识别才更酷!|在线课堂
  6. python语法(二)——截取字符串的方法详解
  7. 什么是软件开发模式?
  8. Oracle 12cR2发布,金融行业准备大规模上了
  9. 分布式机器学习(下)-联邦学习
  10. R语言 多元方差分析|单因素方差分析
  11. Python如何判断某天是星期几
  12. 人件札记:团队的化学反应
  13. 交换机 VLAN 端口类型
  14. arduino密码锁代码
  15. kubernetes-StorageClass介绍
  16. MySQL中复制表/结构的写法
  17. coap协议学习之搭建coap测试环境
  18. 非大道理谈创业团队的鬼门关
  19. 计算机主机通常包不包括硬盘,计算机主机通常包括
  20. JAVA高考加油,给高考学子加油打气的祝福语

热门文章

  1. linux centos7 安装redis
  2. [LeetCode] Count Primes - 素数系列问题
  3. 【数据结构与算法】之深入解析“24点游戏”的求解思路与算法示例
  4. Git之深入解析如何通过GPG签署和验证工作
  5. OpenGL ES之GLSL渲染图片显示的整体流程
  6. LeetCode Algorithm 1267. 统计参与通信的服务器
  7. 华为有造车实力,却坚决不造整车,这背后有着怎样的无奈与思考?
  8. 327. Count of Range Sum 区间和的个数
  9. 2019第十届蓝桥杯C/C++ B组省赛 —— 第四题:数的分解
  10. Andy's First Dictionary