牛牛的凑数游戏 --- 题解

目录

牛牛的凑数游戏:

题目大意:

思路解析:

代码实现:


牛牛的凑数游戏:

题目大意:

 

思路解析:

        我们可以很容易一个区间是否会存在1,那么我们想如果存在1,且有3个1,那我们一定可以组成 1,2,3,那么为出现的数为4,如果这个区间还有一个四,我们可以发现我们一定可以组成5,6,7,那我们如果这个区间还有 a个3,b个2,那我们发现我们一定可以组成 [1,3+4+3*a+2*b],这是因为任意一个数都可以表示为 n = 4 * k + m, 0<=m<=3,那我们假设组成的3+4+3*a+2*b == 17,那么下一次的数一定可以表示为 n = 17 * k + m ( 0<=m<=16)..... 这个问题就转化为了 计算[1,1]的和 记作 a, 计算[1,a+1]的和 记住b,计算[1,b+1]的和。。。一直迭代下去最后一定会因为某些数字的未出现而结束。

        那么问题变为了查询 [l,r]这个区间 里面数字属于 [L,R]这个范围的和为多少。这个可以使用主席树实现。

代码实现:

import java.io.*;
import java.math.BigInteger;
import java.util.*;public class Main {static int MAXN = (int) 1e5 + 5;static int tot = 0;static int[] a = new int[MAXN];static int[] root = new int[MAXN];static Node[] t = new Node[MAXN * 32];static int ans = 0;static int INF = (int) 1e9 +100;public static void main(String[] args) {int n = f.nextInt(); int m = f.nextInt();t[0] = new Node();for (int i = 1; i <= n; i++) {a[i] = f.nextInt();root[i] = ins(root[i], root[i - 1], 1, INF, a[i]);}while (m > 0){int l = f.nextInt();int r = f.nextInt();long cur = 0, res = 0;do {cur = res + 1;res = qry(root[l - 1], root[r], 1, INF, 1, Math.min(cur, INF));}while (cur <= res);System.out.println(cur);m--;}}public static long qry(int s, int e, int l, int r, int L, long R){if (L <= l && R >= r) return t[e].sum - t[s].sum;long res = 0;int mid = (l + r) >> 1;if (L <= mid) res += qry(t[s].l, t[e].l, l, mid, L, R);if (R > mid) res += qry(t[s].r, t[e].r, mid+1, r, L, R);return res;}public static int ins(int p, int q, int l, int r, int x){p = ++tot;t[p] = new Node(t[q]);t[p].sum += x;if (l == r) return p;int mid = (l + r) >> 1;if (x <= mid) t[p].l = ins(t[p].l, t[q].l, l, mid, x);else t[p].r = ins(t[p].r, t[q].r, mid+1, r, x);return p;}static class Node{int l, r;long sum;public Node(Node node) {this.l = node.l;this.r = node.r;this.sum = node.sum;}public Node(){}}static PrintWriter w = new PrintWriter(new OutputStreamWriter(System.out));static Input f = new Input(System.in);static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));static class Input {public BufferedReader reader;public StringTokenizer tokenizer;public Input(InputStream stream) {reader = new BufferedReader(new InputStreamReader(stream), 32768);tokenizer = null;}public String next() {while (tokenizer == null || !tokenizer.hasMoreTokens()) {try {tokenizer = new StringTokenizer(reader.readLine());} catch (IOException e) {throw new RuntimeException(e);}}return tokenizer.nextToken();}public String nextLine() {String str = null;try {str = reader.readLine();} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}return str;}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}public Double nextDouble() {return Double.parseDouble(next());}public BigInteger nextBigInteger() {return new BigInteger(next());}}
}

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

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

相关文章

电商场景下 ES 搜索引擎的稳定性治理实践

继上文在完成了第一阶段 ES 搜索引擎的搭建后&#xff0c;已经能够实现对千万级别的商品索引的读写请求的支持。目前&#xff0c;单机房读流量在 500&#xff5e;1000 QPS 之间&#xff0c;写流量在 500 QPS 左右。 但随着业务的发展&#xff0c;问题也逐渐开始暴露&#xff0…

信号与系统学习笔记——信号的分类

目录 一、确定与随机 二、连续与离散 三、周期与非周期 判断是否为周期函数 离散信号的周期 结论 四、能量与功率 定义 结论 五、因果与反因果 六、阶跃函数 定义 性质 七、冲激函数 定义 重要关系 作用 一、确定与随机 确定信号&#xff1a;可以确定时间函数…

[保姆级教程]Windows安装MongoDB教程

文章目录 导文MongoDB安装包下载1.点击进入mongodb官网2.点击MongoDB Community Edition&#xff08;社区版&#xff09;&#xff0c;进入下图界面3.选择版本4.下载5.安装6.勾选同意协议&#xff0c;点击“Next"7.选择自定义安装8.点击“Next"9.修改到合适的地址10.点…

3D全景:为各行业提供更真实的交互体验

近年来&#xff0c;随着科技的不断发展&#xff0c;3D全景技术逐渐融入到了我们的日常生活中来。3D全景技术的应用落地&#xff0c;为广大用户提供了全新的视觉体验&#xff0c;让人们能够更加真实、直观地感受各行业的场景。 3D全景的优势就在于真实感和互动性&#xff0c;可以…

【Unity】Transform、Rigidbody、CharacterController移动

前言 在使用Unity开发的时候&#xff0c;移动是最最基础的一个需求&#xff0c;我来给大家简单的讲一下Unity中的几种常见的移动方法。 1.Transform移动 Transform移动就是修改物体的position ①修改位置 这里要注意&#xff1a;坐标分为世界坐标和本地坐标 //将物体的世界坐…

后端给前端导出 数据excal表

pom <!-- 读取文档 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.15</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><…

机器学习-0X-神经网络

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中神经网络算法。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化接口实现 参考 机器学习定义 关于机…

【JavaScript 漫游】【036】CORS 通信总结

文章简介 CORS 是一个 W3C 标准&#xff0c;全称是“跨域资源共享”&#xff08;Cross-origin resource sharing&#xff09;。它允许浏览器向跨域的服务器&#xff0c;发出 XMLHttpRequest 请求&#xff0c;从而克服了 AJAX 只能同源使用的限制。 本篇文章为【JavaScript 漫…

x6.js 从流程图组件库中拖拽组件到画布dnd使用

上一篇已经了解到了x6.js常用功能以及使用方法。但我们使用流程图的时候还少不了一个非常重要的功能那就是拖拽组件库里的组件进来。如下图&#xff1a; 首先是布局这块&#xff0c;拖拽组件库的视图中布局无需我们去写&#xff0c;我们只需把界面搭建好。 添加组件库 1.搭建布…

Opencascade基础教程(9):切换视图

1、切换视图 1、1 增加视图切换按钮&#xff0c;并添加消息响应函数。 void COCCDemoView::OnButtonFrontview() {//前视图m_View->SetProj(V3d_Yneg);m_View->FitAll(); }void COCCDemoView::OnButtonRearview() {//后视图m_View->SetProj(V3d_Ypos);m_View->Fit…

<JavaEE> 了解网络层协议 -- IP协议

目录 初识IP协议 什么是IP协议&#xff1f; IP协议中的基础概念 IP协议格式 图示 4bit版本号&#xff08;version&#xff09; 4bit头部长度&#xff08;headerlength&#xff09; 8bit服务类型&#xff08;TypeOfService&#xff09; 16bit总长度&#xff08;total l…

数据仓库原理(二)

目录 四、数据仓库的概念模型&#xff08;一&#xff09;多维数据模型&#xff08;二&#xff09;维度与粒度 五、数据仓库的逻辑模型&#xff08;一&#xff09;多维模型&#xff08;二&#xff09;星形模型&#xff08;三&#xff09;雪花模型 六、数据仓库的物理模型&#x…