1/7的小数点后2020位的数字是_如果把数字5写在某自然数右端

1/7的小数点后2020位的数字是_如果把数字5写在某自然数右端给定长度为 N 的整数序列 A,下标为 1∼N。现在要执行 M 次操作,其中第 i 次操作为给出三个整数 li,ri,ki,求 A[li],A[li+1],…,A[ri] (即 A 的下标区间 [li,ri])中第 ki 小的数是多少。输入格式第一行包含两个整数 N 和 M。第二行包含 N 个整数,表示整数序列 A。接下来 M 行,每行包含三个整数 li,ri,ki,用以描述第 i 次操作。输出格式对于每次操作输出一个结果,表示在该次操作中,第 k 小的数的数值。每个结果占一行。数据范围

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

给定长度为 N 的整数序列 A,下标为 1∼N。

现在要执行 M 次操作,其中第 i 次操作为给出三个整数 li,ri,ki,求 A[li],A[li+1],…,A[ri] (即 A 的下标区间 [li,ri])中第 ki 小的数是多少。

输入格式
第一行包含两个整数 N 和 M。

第二行包含 N 个整数,表示整数序列 A。

接下来 M 行,每行包含三个整数 li,ri,ki,用以描述第 i 次操作。

输出格式
对于每次操作输出一个结果,表示在该次操作中,第 k 小的数的数值。

每个结果占一行。

数据范围
N≤105,M≤104,|A[i]|≤109

输入样例:
7 3
1 5 2 6 3 7 4
2 5 3
4 4 1
1 7 3
输出样例:
5
6
3
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1e5+10, M = 1e4+10;
int w[N], root[N], idx;
vector<int> pos;
int n, m;
struct Node
{ 
   
    int l, r, cnt;
}t[N * 4 + 17 * N];
void build(int &u, int L, int R)
{ 
   
    u = ++ idx;
    if(L == R) return;
    int mid = L + R >> 1;
    build(t[u].l, L, mid); build(t[u].r, mid + 1, R);
}
int getp(int x)
{ 
   
    return lower_bound(pos.begin(), pos.end(), x) - pos.begin();
}
void insert(int p, int &q, int L, int R, int k)
{ 
   
    q = ++ idx; t[q] = t[p]; t[q].cnt ++;
    if(L == R) return;
    int mid = L + R >>1;
    if(k <= mid) insert(t[p].l, t[q].l, L, mid, k);
    if(k > mid) insert(t[p].r, t[q].r, mid + 1, R, k);
}
int query(int p, int q, int k, int L, int R)
{ 
   
    if(L == R) return L;
    int mid = L + R >> 1;
    int cnt = t[t[q].l].cnt - t[t[p].l].cnt;
    if(cnt >= k) return query(t[p].l, t[q].l, k, L, mid);
    if(cnt < k) return query(t[p].r, t[q].r, k - cnt, mid + 1, R);
    
}
int main()
{ 
   
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; ++ i)
    { 
   
        scanf("%d", &w[i]);
        pos.push_back(w[i]);
    }
    sort(pos.begin(), pos.end());
    pos.erase(unique(pos.begin(), pos.end()), pos.end());
    build(root[0], 0, pos.size() - 1);
    for(int i = 1; i <= n; ++ i) insert(root[i - 1], root[i], 0, pos.size() - 1, getp(w[i]));
    while(m -- )
    { 
   
        int l, r, k; scanf("%d%d%d", &l, &r, &k);
        printf("%d\n", pos[query(root[l - 1], root[r], k, 0, pos.size() - 1)]);
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169095.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ArcGIS二次开发知识点总结「建议收藏」

    ArcGIS二次开发知识点总结「建议收藏」空间分析定义:空间分析是指分析具有空间坐标或相对位置的数据和过程的理论和方法,是对地理空间现象的定量研究,其目的在于提取并传输空间数据中隐含的空间信息。叠置分析定义:是指将同一坐标系统下不同信息表达的两组或多组专题要素的图层进行叠加,从而产生一个新图层的过程缓冲区分析定义:是指根据分析对象的点、线、面实体,自动建立其周围一定距离的带状区,用以识别这些实体或者主体对邻近对象的辐射范围或者…

    2022年6月30日
    22
  • 如何查看linux系统的内核版本信息_内核版本

    如何查看linux系统的内核版本信息_内核版本查看Linux内核版本和系统版本信息**一、查看Linux内核版本命令(两种方法):1、cat/proc/version2、uname-a二、查看Linux系统版本的命令(3种方法):1、lsb_release-a,即可列出所有版本信息这个命令适用于所有的Linux发行版,包括RedHat、SUSE、Debian…等发行版。2、cat/etc/redhat-release,这…

    2022年10月13日
    7
  • 成年人最大的悲哀,就是突然读懂了鲁迅

    原文始发于微信公众号():成年人最大的悲哀,就是突然读懂了鲁迅

    2021年6月21日
    98
  • Linux —— useradd -g mysql mysql解析及useradd详解

    Linux —— useradd -g mysql mysql解析及useradd详解当我们在不通过 yum CentOS apt get Ubuntu 来安装 MySQL 的时候 通常执行以下命令来创建一个用户名为 mysql 的用户并加入 mysql 用户组 root localhost useradd gmysqlmysql 那 这两个 mysql 谁是用户名谁是用户组呢 事实上它还可以这样写 root localhost

    2025年8月9日
    3
  • 二进制加,减法,23个位运算技巧[通俗易懂]

    二进制加,减法,23个位运算技巧[通俗易懂]二进制加,减法二进制最高位为1时表示负数,为0时表示正数。**原码:**一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码。举例说明:      int类型的3的原码是11B(B表示二进制位),在32位机器上占四个字节,那么高位补零就得:      00000000000000000000000000000011    …

    2022年6月25日
    35
  • tensorflow2.0手写数字识别_python 数字识别

    tensorflow2.0手写数字识别_python 数字识别本文使用Tensorflow框架进行Python编程实现基于卷积神经网络的手写数字识别算法,并将其封装在一个GUI界面中,最终,设计并实现了一个手写数字识别系统。

    2025年11月18日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号