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

链接:

文章目录

    • 题目描述
    • 题解:
    • 主席树做法:
    • 代码:
    • 树状数组:
    • 更扯淡的方法!!!

时间限制: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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三元环计数四元环计数

三元环计数 问题 给出一张n个点m条边的无向图&#xff0c;问图中有多少个三元组{ u , v , w } &#xff0c;满足图中存在 { (u,v) , (v,w) , (w,u) } 三条边。 求解 Step1 定向 将所有点按 度数 从小到大排序&#xff0c;如果度数相同按 点编号 从小到大排序&#xff0c;u…

YbtOJ#20240-[冲刺NOIP2020模拟赛Day10]弱者对决【笛卡尔树,区间dp】

正题 题目链接:https://www.ybtoj.com.cn/contest/68/problem/4 题目大意 mmm个三元组(ai,bi,ci)(a_i,b_i,c_i)(ai​,bi​,ci​)&#xff0c;如果ci≥min{xj}(ai≤j≤bi)c_i\geq min\{x_j\}(a_i\leq j\leq b_i)ci​≥min{xj​}(ai​≤j≤bi​)那么可以获得min{xj}min\{x_j\}mi…

牛客网【每日一题】5月1日题目 [SCOI2012]滑雪与时间胶囊

链接&#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 a180285非常喜欢滑雪。他来到一座雪山&#xff0c;这里分布着M条供滑行的轨道和N个轨道之间的交点&#x…

漫谈单体架构与微服务架构(上):单体架构

最近微服务架构特别火爆&#xff0c;就跟人工智能、区块链一样&#xff0c;软件架构设计如果不提微服务&#xff0c;感觉就像是与世界先进的架构风格和开发技术脱了节似的&#xff0c;各方各面都无法彰显高大上的气质。本来再打算使用一套系列文章来讨论微服务的方方面面&#…

【数学】奶牛编号(jzoj 2932)

奶牛编号 jozj 2932 题目大意 求出有m个1的01串中字典序第n大的字典序 输入样例 7 3输出样例 10110数据范围 1⩽M⩽101 \leqslant M \leqslant 101⩽M⩽10 1⩽N⩽1071 \leqslant N \leqslant 10^71⩽N⩽107 解题思路 我们先从01串长度入手&#xff1a; 先对m1m 1m1的特…

CF732F Tourist Reform(dfs树、边双连通图、tarjan)

因为知道了算法tag&#xff0c;所以想到了正解&#xff1a; 先给出两个性质&#xff1a; 边双给边定向一定可以转为强连通图,此为最优解树给边定向后R的最小值必为0 性质2证明如下&#xff1a; 设树有n个节点, 若R_min!0, 则每点出度至少为1,各点出度之和至少为n, 则至少有…

【归并排序】奶牛的图片(jzoj 1812)

奶牛的图片 jzoj 1812 题目大意 给你一个序列&#xff0c;你可以交换相邻的两个数 让你用最少的交换次数来使得这个序列变成形如a1,a2...n,1,2...a−1,aa1,a2...n,1,2...a-1,aa1,a2...n,1,2...a−1,a的序列 问你最少的交换次数是多少次 输入样例 5 3 5 4 2 1输出样例 2解…

YbtOJ#20237-[冲刺NOIP2020模拟赛Day10]区间均值【树状数组】

正题 题目链接:https://www.ybtoj.com.cn/contest/68/problem/1 题目大意 nnn个数字的序列&#xff0c;求有多少个区间[l,r][l,r][l,r]的平均值在[L,R][L,R][L,R]的范围内。 解题思路 如果让每个ai−xa_i-xai​−x&#xff0c;那么统计区间和大于等于111的区间数量就可以统计…

ASP.NET Core应用程序的参数配置及使用

应用程序的开发不仅仅是写代码这点事情。假设你正在开发一个能够支持多次部署的微服务&#xff0c;此时你就需要有一个合理的应用程序配置方案&#xff0c;以便在开发和生产环境中能够方便地选用不同的配置参数&#xff0c;并且能够在部署到容器服务&#xff08;比如ACS或者Kub…

“Shopee杯” e起来编程暨武汉大学2020年大学生程序设计大赛决赛(重现赛)

比赛链接 文章目录A题 A Simple Problem about election题目描述题解&#xff1a;代码&#xff1a;D题 Deploy the medical team题意&#xff1a;题解&#xff1a;代码&#xff1a;F题 Figure out the sequence题意&#xff1a;题解&#xff1a;代码A题 A Simple Problem about…

Kruskal重构树

建树 模仿kruskal的过程&#xff0c;先将边权排序 依次遍历每条边 若该边连接的两个节点u和v不在一个并查集内 就新建一个结点node 该点点权为这条边的边权 找到u&#xff0c;v所在并查集的根 fufufu,fvfvfv 连边(node,fu)(n o d e , fu )(node,fu) (node,fv)( n o d e , f…

【斜率优化】玩具装箱(luogu 3195)

玩具装箱 luogu 3195 题目大意 有n件物品&#xff0c;每件物品有相对的长度CiC_iCi​现在要把这n件物品放到容器中&#xff0c;切放的物品必须是连续的&#xff0c;若把第i件物品到第j件物品放到一个容器中&#xff0c;那此容器的长度定义为xj−i∑kijCixj−i\sum_{ki}^{j} …

P5895-[IOI2013]dreaming梦想【树的直径,结论】

正题 题目链接:https://www.luogu.com.cn/problem/P5895 题目大意 nnn个点的一个森林&#xff0c;加入若干条长度为LLL的边使它变成一个树&#xff0c;求这棵树的最小直径。 解题思路 显然最优情况一定是以某个节点作为中间展开的一个菊花图&#xff08;每棵树看做一个点&…

RabbitMQ一个简单可靠的方案(.Net Core实现)

前言最近需要使用到消息队列相关技术&#xff0c;于是重新接触RabbitMQ。其中遇到了不少可靠性方面的问题&#xff0c;归纳了一下&#xff0c;大概有以下几种&#xff1a;1. 临时异常&#xff0c;如数据库网络闪断、http请求临时失效等&#xff1b;2. 时序异常&#xff0c;如A任…

CF1120D Power Tree(树形DP/构造+差分+最小生成树)

解法一&#xff1a;树形DP 个人觉得这个方法是比较可能想到的&#xff0c;但是输出方案很恶心 先转换题意&#xff1a;“无论怎样规定叶子的初始点权&#xff0c;都可以通过操作你选择的点来让所有叶子的点权清空”意味着每个叶子节点都可以通过一系列操作单独1、-1 模拟一下…

牛牛染颜色

链接&#xff1a; 文章目录题目描述题意&#xff1a;题解&#xff1a;核心代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld题目描述 牛牛最近得到了一颗树&#xff0…

【数学期望】【LCA】【树形DP】树

树 题目大意 给你一棵有n个节点的树&#xff0c;以及m个询问&#xff0c;每个询问需要你回答一个点到另一个点要经过的期望边数 输入样例 4 2 1 2 2 3 3 4 1 4 3 4输出样例 9 5 数据范围 对于 20%20\%20%的数据,N⩽10.N \leqslant 10.N⩽10. 对于 40%40\%40%的数据,N⩽10…

P3768-简单的数学题【莫比乌斯反演,杜教筛】

正题 题目链接:https://www.luogu.com.cn/problem/P3768 题目大意 给出n,pn,pn,p求∑i1n∑j1ngcd(i,j)∗i∗j\sum_{i1}^n\sum_{j1}^ngcd(i,j)*i*ji1∑n​j1∑n​gcd(i,j)∗i∗j模ppp的值。 解题思路 下文中定义Hy(x)∑i1xiyH_y(x)\sum_{i1}^xi^yHy​(x)∑i1x​iy 首先显然是…

.netcore consul实现服务注册与发现-单节点部署

一、Consul的基础介绍Consul是HashiCorp公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案&#xff0c;比如 Airbnb的SmartStack等相比&#xff0c;Consul的方案更“一站式”&#xff0c;内置了服务注册与发现框 架、分布一…

MST(最小生成树)上的确定性和存在性问题

题目1&#xff1a; 给定一个n个点m条边的连通图&#xff0c;保证没有自环和重边。对于每条边求出,在其他边权值不变的情况下,它能取的最大权值&#xff0c;使得这条边在连通图的所有最小生成树上。假如最大权值为无限大&#xff0c;则输出-1。 题解&#xff1a; 先求出图的一…