链接:

文章目录

  • 题目描述
  • 题解:
  • 主席树做法:
  • 代码:
  • 树状数组:
  • 更扯淡的方法!!!
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

输入描述:

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

输出描述:

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

示例1
输入

5 1
1 2 3 4 5
1 5 3

输出

3

备注:
数据范围
1 ≤ n ≤ 105
1 ≤ m ≤ 105

题解:

主席树,树状数组等都可以做

主席树做法:

简单提一句主席树
主席树的本体其实是线段树,也就是很多棵线段树,用以存一段数字区间出现次数,主席树经常用于求一个序列内的第 k 小
在这里,主席树就是提前预处理好每个点的权值线段树,查询时,可以直接用r时刻前缀小于x的数量减去l-1的数量,剩下的就是[l,r]区间值
也就是[L,R]=[1,R]-[1,L-1],查询后两者相减即可

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+2;
int n,m;
int a[maxn];
vector<int>edge[maxn*4];void build(int id,int l,int r)
{edge[id].clear();for(int i=l;i<=r;i++) edge[id].push_back(a[i]);sort(edge[id].begin(),edge[id].end());if(l==r) return;int mid=(l+r)>>1;build(id<<1,l,mid);build(id<<1|1,mid+1,r);
}//建树
int query(int id,int L,int R,int l,int r,int k)
{  int sum=0;vector<int>::iterator it;if(l<=L&&R<=r){it=upper_bound(edge[id].begin(),edge[id].end(),k);//二分查找,第一个大于k的数,返回地址 return it-edge[id].begin();//两者做差的个数}int mid=(L+R)/2;if(l<=mid){sum+=query(id*2,L,mid,l,r,k);}if(mid<r){sum+=query(id*2,mid+1,R,l,r,k);} return sum;
}
int main()
{ int l,r,k;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) cin>>a[i];build(1,1,n);while(m--){cin>>l>>r>>k;printf("%d\n",query(1,1,n,l,r,k));}return 0;
}

代码:

树状数组:

首先需要离线操作,我们每次查询都是要知道左右区间以及x,相当于同时有两个东西未知需要操作。通过离散后,我们可以控制其中一部分,另外一部分未知变化,例如:第一种我们查询[l,r]内有多少数满足条件,我们就要保证所有数都小于x;第二种如何问有多少数小于等于x,就保证范围取定于[l,r]。这样更高效,当然占空间更多。

简单的说:
离线操作:读入所有的操作数据,然后一次性处理。
在线操作:每读入一个操作数据,就进行一次操作。

第一种:
我们在保证所有数都是小于等于x的情况下来查询[l,r]有多少个数
每次询问[l,r,x]之前,把小于等于x的ai都加入加入到一个另外的位置上,这样里面存放的都是满足条件的数,直接询问即可

第二种:
保证所有数都在[l,r]区间的情况下,查询小于等于x的数量
我们可以在离线时,将[l,r]区间问题转化成 [ 1 , l-1 ] , [ 1 , r ] 两个区间,这样就可以用树状数组来解决

(这是邓老师的讲解,我加入自己的理解写出来的)

代码写完再更

更扯淡的方法!!!

这题貌似优化暴力就能过。。。
就是直接模拟,不知为啥过了。。快读都还没用上

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;const int N = 1e5 + 3;
int a[N];int main() {int n,m;cin>>n>>m;for (int i = 1; i <= n; ++i)   cin>>a[i]; while (m--) {int l,r,k;cin>>l>>r>>k;int sum = 0;for (int i = l; i <= r; ++i)if (a[i] <= k)    ++sum;printf("%d\n", sum);}return 0;
}

牛客网【每日一题】4月30日题目精讲 换个角度思考相关推荐

  1. 牛客网 每日一题 7月23日题目精讲—wpy的请求

    来源:牛客网: 文章目录 wpy的请求 题解: 代码: wpy的请求 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge ...

  2. 牛客网【每日一题】7月30日题目精讲—Xor Path

    来源:牛客网: Xor Path 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 给定一棵 ...

  3. 【牛客每日一题】tokitsukaze and Soldier 题目精讲 贪心、优先队列、堆

    链接:https://ac.nowcoder.com/acm/problem/50439 来源:牛客网 ACM在线模板 今天才发现牛客推出了一个每日一题的版块,3月25号就开始了,今天才发现,赶紧补救 ...

  4. 【每日一题】8月28日题目精讲 编号

    [每日一题]8月28日题目精讲 编号 链接:https://ac.nowcoder.com/acm/problem/19925 来源:牛客网 题目描述 你需要给一批商品编号,其中每个编号都是一个7位1 ...

  5. 【每日一题】7月17日题目精讲—BOWL 碗的叠放

    [每日一题]7月17日题目精讲-BOWL 碗的叠放 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld ...

  6. 【每日一题】7月15日题目精讲—生日快乐

    [每日一题]7月15日题目精讲-生日快乐 [SCOI2009]生日快乐 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO For ...

  7. 【每日一题】7月13日题目精讲—Kingdom

    [每日一题]7月13日题目精讲-Kingdom 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 1048576K,其他语言2097152K 64bi ...

  8. 牛客网【每日一题】4月14日题目精讲 Xorto

    文章目录 题目描述 题解: 代码: 扩展 传送 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format:%lld 题目描述 ...

  9. 牛客网 【每日一题】8月5日题目精讲—蓝魔法师

    来源:牛客网: 文章目录 题目描述 题解: 代码: 题目描述 "你,你认错人了.我真的,真的不是食人魔."–蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于 ...

最新文章

  1. es统计有多少个分组_es多字段分组去重统计
  2. Spark详解(一):Spark及其生态圈概述
  3. Java.io包中常用的类
  4. SAP Spartacus的一个问题 - CheckoutStepsSetGuard无法import
  5. 【转】dicom通讯的工作方式及dicom标准简介!!
  6. 宝塔面板插件 sitemap生成器(附神马/百度主动推送)
  7. javaweb(10) cookiesession
  8. 【C++】运算符重载关于const的分析(超详细)
  9. 关于Mysql服务自动关闭以及无法启动问题的解决办法
  10. linux下的僵尸进程 - Zombie
  11. 视频教程-职场办公Excel技巧精粹灵活妙用集锦-Office/WPS
  12. 计算机操作基础知识点总结
  13. 七牛云智能日志管理平台的应用与设计
  14. LayUI_03 前端框架 内置模块
  15. win10linux双系统时间,win10与linux双系统切换时间不一致的调整
  16. [Leetcode] 382. Linked List Random Node 解题报告
  17. mysql三叶草,温州日报瓯网 - 面对温州话,你被困住了吗?
  18. 计算机硬盘只显示c盘,电脑只显示C盘我们应该怎么办
  19. 关于ttyS与ttySAC
  20. csr867x入门之触摸按键配置(十一)

热门文章

  1. 骗人的数学题,那消失的1块钱到底被谁拿走了
  2. 你根本想象不到,学霸到底经历过什么
  3. 三个字帮大家总结一下刘强东事件
  4. 这三道题,总有一道你是答不出来的
  5. 《SAS编程与数据挖掘商业案例》学习笔记之十三
  6. qt显示echart_Qt配置,载入html,Echart, 交互
  7. linux phpunit 安装,PHPUnit安装教程
  8. java io类库,Java利用io类库对各种文件的操作详解
  9. python 正则匹配 条件太多怎么办_Python条件正则表达式
  10. 墨迹天气语音包_小米有品“智能AI翻译机”评测,还内置了语音助手,随身WiFi功能...