FJUT-ACM 寒假作业第1周A题

二分强化——全面查询

TimeLimit:2000MS  MemoryLimit:128MB

64-bit integer IO format:%I64d

给出一个从递增的正整数序列a0,a1……an-1

对不同的查询输出对应结果

Intput

只有一组数据

第一行是一个整数n,代表序列的长度(下标从0开始一直到n-1)

接下来n个整数,代表序列对应位置上的数

再接下来一行是一个整数m代表查询次数

接下来m行

接下来的每行是这5种类型之一

0 x    代表查询数字x出现的最大下标,若不存在x输出-1

1 x    代表查询数字x出现的最小下标,若不存在x输出-1

2 x y    代表查询大于等于x且小于等于y的数字的个数,并保证x<=y

3 x    代表查询比x大且下标最小的数字的大小,若不存在比x大的数字输出-1

4 x    代表查询比x小且下标最大的数字的大小,若不存在比x小的数字输出-1

n,m<10^5

0<=ai,x,y<10^9

Output

输出对应结果,每个结果占一行

SampleInput

10

1 1 1 3 4 5 5 5 5 8

5

0 5

1 5

2 1 5

3 4

4 8

SampleOutput

8

5

9

5

5

思路:

  这道题看似很复杂,实际上不然。

  首先对于数据的量和数据大小来说,用int肯定是会爆炸的,所以不可避免的要使用long long。同理,在如此庞大的数据量下,使用枚举妥妥超时,这就需要用到二分的思想。

  对于这5种可能的输入,我们将其一个一个细化,可以发现实际上就是寻找目标数字的最小下标和最大下标。简单的来说,我们只需要用两个函数来分别寻找目标数字的上限和下限。

  对于0和1,只需要简单的使用这两个函数,但是需要注意某些特殊的情况,就是题目中所说的目标数字不存在的情况。具体的写法这里不做描述,留给你们自己思考的空间。

  那么对于2而言,实际上只需要找到x的最小下标和y的最大下标,然后就能够得到满足题目要求的区间。

  对于3,只需要找到x的最大下标,然后视情况下标+1,或者输出-1;

  同理,4也是相似的做法。

  以下是核心代码,请不要直接使用,一定要明白意思,再自己写一遍自己觉得顺手的:

PS:可能还会有更新。。。

时间: 2024-10-13 23:28:48

FJUT-ACM 寒假作业第1周A题的相关文章

寒假作业2

寒假作业2 GitHub仓库地址:Destr 慕课在线学习 课程 我选择的是西安交通大学计算机程序设计(C++),授课老师赵英良. 原因 这门课程从C++基础开始讲起,较好的完成了从C到C++的过度,而且西安交大也是一所知名的高校,可以使我较好的在寒假期间完成C++的学习 课程目录 第1周 程序设计与C++概述 第2周 简单信息的表示和基本运算 第3周 运算的流程控制 第4周 复杂信息的表达与处理 第5周 问题的模块化求解 第6周 问题的模块化求解(2)--特殊函数 第7周 按址操作(1)--指

寒假作业2-2

所选课程 西安交通大学的计算机程序设计课程 理由: 首先是该门课程符合寒假作业的选课要求.并且西安交通大学做为一所名气相对较高的学府,我相信他的课程质量在同类型的课程中应该会是较为出色的.最重要的是该门课程有国家精品的标志,并且多次开课的参加人数均是几万人,既然mooc给予了这么高的评价,那么我认为该门课程必当有很多值得我学习的地方.但是考虑到这门课的课程量十分庞大,我再三估计认为还是很难在一个寒假之内将这门课程学完,不过我会尽我所能挤出时间,在充分掌握所学课程的情况下再进行该课程下一阶段的学习

马哥linux作业第五周&#39;

1.显示当前系统上root.fedora或user1用户的默认shell: egrep "^(root|fedora|user1)\>" /etc/passwd |cut -d: -f1,7 root|fedora|user1表示三者符合其一的选择条件 ()使其归组 ^表示以后面归组的条件开头 \>表示以空字符截断此前的条件字符,即后跟其它字符的单词将不匹配 2.找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello():

洛谷 P2717 寒假作业

题目背景 zzs和zzy正在被寒假作业折磨,然而他们有答案可以抄啊. 题目描述 他们共有n项寒假作业.zzy给每项寒假作业都定义了一个疲劳值Ai,表示抄这个作业所要花的精力.zzs现在想要知道,有多少组连续的寒假作业的疲劳值的平均值不小于k? 简单地说,给定n个正整数A1,A2,A3,...,An,求出有多少个连续的子序列的平均值不小于k. 输入输出格式 输入格式: 第一行两个正整数,n和k. 第二行到第n+1行,每行一个正整数Ai. 输出格式: 一个非负整数. 输入输出样例 输入样例#1: 3

20145324寒假补考准备第一周

20145324寒假补考准备第一周 补考科目:马原 复习时间:五周 复习计划: 第一周: 第一.二章 第二周:第三.四章 第三周:第五.六章 第四周:选择题 第五周:解答题 复习目标:开学后补考通过

2016蓝桥杯省赛C/C++A组第六题 寒假作业

题意:现在小学的数学题目也不是那么好玩的. 看看这个寒假作业: □ + □ = □ □ - □ = □ □ × □ = □ □ ÷ □ = □ 每个方块代表1~13中的某一个数字,但不能重复. 比如: 6 + 7 = 13 9 - 8 = 1 3 * 4 = 12 10 / 2 = 5 以及: 7 + 6 = 13 9 - 8 = 1 3 * 4 = 12 10 / 2 = 5 就算两种解法.(加法,乘法交换律后算不同的方案) 你一共找到了多少种方案? 分析:回溯即可,但是如果等到cur==12

马哥linux作业第三周&#39;

1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. who | cut -d' ' -f1 | sort -u 2.取出最后登录到当前系统的用户的相关信息. last | head -1 3.取出当前系统上被用户当作其默认shell的最多的那个shell. cat /etc/passwd | cut -d ':' -f7 |sort | uniq -c | sort |head -1 4.将/etc/passw d 中的第三个字段数值最大的后10个用户的信

洛谷P2717 寒假作业

题目:https://www.luogu.org/problemnew/show/2717 题目背景 zzs和zzy正在被寒假作业折磨,然而他们有答案可以抄啊. 题目描述 他们共有n项寒假作业.zzy给每项寒假作业都定义了一个疲劳值Ai,表示抄这个作业所要花的精力.zzs现在想要知道,有多少组连续的寒假作业的疲劳值的平均值不小于k? 简单地说,给定n个正整数A1,A2,A3,...,An,求出有多少个连续的子序列的平均值不小于k. 输入输出格式 输入格式: 第一行两个正整数,n和k. 第二行到第

2017级面向对象程序设计寒假作业2

Deadline:2018.02.11 22:00 pm 第一次的寒假作业,开启了大家的寒假生活,转眼回到了"小学生作文题"的感觉.不知道是否也通过这次作业,将你的回忆时光拉回到了几年前或十年前,沉思回忆代替了纷扰的知识.很多同学回忆了小学.中学的课任老师,或书法.绘画的老师.无论他们是严厉还是宽容,是鸡汤还是淡定,都或多或少的影响或潜移默化改变着你.在经过一次时光超越后,书归正传,我们开启编码的作业. 一.Pintia小作业 注册pintia,填写昵称为"fzu+学号&qu