D. Frets On Fire(二分 + 前缀和)

news2024/11/25 21:31:17

Problem - D - Codeforces

Miyako带着一个乌克丽丽来到跳蚤王国。她与当地的跳蚤居民成为好朋友,并每天为他们演奏美妙的音乐。
作为国报,跳蚤们为她制作了一个更大的乌克丽E:它有n根这,每核这上都有(1018+1)个品位(ires),从0到10106编号。跳蚤们使用数组s1、s1..、sn来描述乌克丽丽的调音,即第根弦上第j个品位的音高是整数si+j。
Miyako即将离开王国,但跳蚤们希望Miyako能回答一些最后的问题。
每个问题的形式为:“如果我们考虑所有弦上[l,r](包括端点)之间的品位,则有多少不同的音高?”
Miyako即将访问蟋螭王国,没有时间回答所有的问题。请帮助她完成这个任务!
具体而言,给定一个具有n行和(1018+1)列的矩阵,其中第i行和第j列(O<j≤1018)的单元格包含整数si+j。
您需要回答q个查询,在第k个查询中,您必须回答从第Ik列到第rk列(包括)的矩
阵中不同整数的数量。
输入:
第一行包含一个整数n (1<n<100000)-弦的数量。
第二行包含n个整数s1、s2、....、sn (0<si≤1018)-乌克丽丽的调音。第三行包含一个整数q (1≤q≤100000)-问题的数量。
接下来的q行中的第k行包含两个整数lk、rk (O≤lk≤rk≤1018)–来自跳蚤们的一个问题。
输出:
为每个问题输出—个数字,用空格分隔-不同音高的数量。

Examples

input

Copy

6
3 1 4 1 5 9
3
7 7
0 2
8 17

output

Copy

5 10 18

input

Copy

2
1 500000000000000000
2
1000000000000000000 1000000000000000000
0 1000000000000000000

output

Copy

2 1500000000000000000

题解:

1 2 3 4    5  6  7 

2 3 4 5    6  7  8

4 5 6 7    8  9  10

7 8 9 10 11 12 13

先对数组进行排序,假如先取一列,发现各个区间无交集,贡献是4

如果取两列,对于前两行,贡献多了1,后两个贡献正常加2(两行嘛)

如果取三列,对于前三行,贡献多了2,最后一行正常加1

如果取四列,对于前4行,贡献多了3,

我么可以发现一个规律,如果我么在得到,数组a的,相邻差,然后排序,

得到差的前缀和,如果对根据所求区间的大小,对差进行二分,得到下标

那么此时下标的前缀和就是贡献多的数,后面(n - p)就是后几行的正常贡献(因为区间的长度无法影响到后面几行,是他们相交)
 

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
 #define int long long
 typedef pair<int,int> PII;
 int mod = 1e9 + 7;
int a[100050];
struct node
{
	int x;
	int sum;
}b[100050];
bool cmp(node a,node b)
{
	return a.x < b.x;
}
void solve()
{
	int n;
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i];
	}
	sort(a + 1,a + 1 + n);
	int cnt = 0;
//	for(int i = 1;i <= k;i++)
//	cout << a[i] <<" ";

	for(int i = 2;i <= n;i++)
	{
		b[++cnt].x = a[i] - a[i - 1];
	}
	sort(b + 1,b + 1 + cnt,cmp);
	for(int i = 1;i <= cnt;i++)
	{
		b[i].sum = b[i - 1].sum + b[i].x;
	}
	int q;
	cin >> q;
	while(q --)
	{
		int x,y;
		cin >> x >> y;
		int w = y - x + 1;
		int l = 0,r = cnt;
		while(l <= r)
		{
			int mid = (l + r)/2;
			if(b[mid].x > w)
			{
				r = mid - 1;
			}
			else
			{
				l = mid + 1;
			}
		}
		cout << (n - l + 1)*w + b[l - 1].sum <<" ";
	}
	
}
//5 7 8 9 10

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	int t = 1;
//	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

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

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

相关文章

危险区域闯入识别系统 yolov8

危险区域闯入识别系统通过YOLOv8网络模型技术&#xff0c;危险区域闯入识别系统对现场画面中发现有人违规闯入禁区&#xff0c;系统立即抓拍告警同步回传后台。YOLOv8 提供了一个全新的 SOTA 模型&#xff0c;包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例…

打电话用的耳机哪个牌子的好?打电话专用的蓝牙耳机推荐

耳机是可以帮助我们进行工作的娱乐设备&#xff0c;像日常中使用最多的就是通话和听歌啦&#xff0c;近几年不论是从产品推出速度&#xff0c;还是做工及品质上来说都有了质的飞跃&#xff0c;下面分享几款打电话音质好的蓝牙耳机。 一、南卡小音舱Lite2蓝牙耳机 蓝牙版本&am…

Inpaint Anything (AI替换)

1、介绍 Inpaint Anything 是一个结合了 SAM、图像修补模型&#xff08;例如 LaMa&#xff09;和 AIGC 模型&#xff08;例如 Stable Diffusion&#xff09;等视觉基础模型的AI图像替换&#xff0c;修补系统。 基于此系统&#xff0c;用户可以方便的使用IA进行图像替换&#…

electron+vue3全家桶+vite项目搭建【14】electron多窗口,多语言切换不同步更新问题

文章目录 引入问题演示补充逻辑注意封装缓存工具类补充状态管理调整多语言初始化调整多语言切换组件 解决方案思路整理渲染进程监听语言切换主进程创建多语言切换处理语言切换组件通知主进程语言切换 最终实现效果演示 引入 我们之前在这篇文章中集成了 多语言切换&#xff0c…

各种加法器介绍——真值表、表达式、电路图、verilog代码实现

文章目录 前言一、半加器二、全加器三、串行/行波进位加法器&#xff08;Ripple-Carry Adder/RCA&#xff09;四、超前进位加法器&#xff08;Lookahead Carry Adder/LCA&#xff09;五、进位保存加法器&#xff08;Carry Save Adder/CSA&#xff09; 前言 2023.4.25 一、半加…

Stable Diffusion人工智能图像合成

AI 图像生成大有来头。新发布的开源图像合成模型称为Stable Diffusion&#xff0c;它允许任何拥有 PC 和像样的 GPU 的人想象出他们能想象到的几乎任何视觉现实。它几乎可以模仿任何视觉风格&#xff0c;如果你给它输入一个描述性的短语&#xff0c;结果就会像魔术一样出现在你…

HTML5 <span> 标签

实例 HTML5 <span>标签内的内容独立于文档&#xff0c;当对该标签应用样式时&#xff0c;包含在其中的内容会呈现出不同的视觉效果。请参考下述示例&#xff1a; 使用 <span> 元素对文本中的一部分进行着色&#xff1a; <p>我的母亲有 <span style&quo…

Redis缓存预热、雪崩、击穿和穿透

文章目录 1、Redis缓存预热2、Redis缓存雪崩3、Redis缓存击穿4、Redis缓存穿透 1、Redis缓存预热 Redis需要缓存预热是因为Redis是基于内存的缓存系统&#xff0c;当Redis启动时&#xff0c;它的内存是空的&#xff0c;需要在实际使用前将需要缓存的数据提前加载到内存中。这个…

DevExpress:报表中XRPictureBox控件绑定数据库(SQlite)中的图片数据

一.需求描述 1.使用XRPictureBox控件显示图片&#xff1b; 2.因为报表需求&#xff0c;显示的图片在指定条件下需要改变&#xff0c;比如&#xff1a;指定生成小明的报表时&#xff0c;加载小明的头像&#xff1b;指定生成小红的报表时&#xff0c;加载小红的头像&#xff1b;…

midjourney关键词总结

Midjourney是一个自主研发的实验室&#xff0c;用户可以通过Discord与Midjourney bot交互&#xff0c;并提交“Prompt”来快速获取所需的图像。 Midjourney具有易上手、难精通的特点&#xff0c;想要绘制出自己满意的图片&#xff0c;需要掌握各种命令和参数&#xff0c;并花费…

web 应用常用功能 -文件上传下载以及原理分析图和注意事项和细节

目录 web 应用常用功能 -文件上传下载 基本介绍 文件上传 文件上传应用实例 upload.jsp 实现步骤 文件上传注意事项和细节 文件下载 文件下载的原理分析图 文件下载应用实例 ● 需求&#xff1a;演示文件下载&#xff0c;如图 download.jsp FileDownloadServlet …

牛客网Verilog刷题——VL28

牛客网Verilog刷题——VL28 题目答案 题目 请编写一个序列检测模块&#xff0c;输入信号端口为data&#xff0c;表示数据有效的指示信号端口为data_valid。当data_valid信号为高时&#xff0c;表示此刻的输入信号data有效&#xff0c;参与序列检测&#xff1b;当data_valid为低…

【手把手做ROS2机器人系统开发五】使用C++实现编写简单的服务器和客户端

使用C实现编写简单的服务器和客户端 目录 使用C实现编写简单的服务器和客户端 一、程序编写 1、创建软件包 2、编译软件包 3、软件配置 4、服务器程序编写 5、客户端程序编写 6、软件包设置 7、设置编译选项 二、程序测试 1、编译程序 2、开启节点测试运行 3、执行…

verilog语言中的门级描述、行为描述及测试验证

描述D型主从触发器模块的门级结构建模&#xff1a; module flop(data, clock, clear, q, qb);input data, clock, clear; output q, qb;// 批量定义门电路 nand #10 nd1(a, data, clock, clear)&#xff0c;nd2(b, ndata, clock)&#xff0c;nd4(d, c, b, clear)&#xf…

算法刷题|1049.最后一个块石头的重量||、494.目标和、474.一和零

最后一个块石头的重量|| 题目&#xff1a;有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉…

HBase的表设计笔记

HBase的RowKey设计 HBase是三维有序存储的&#xff0c;通过rowkey&#xff08;行键&#xff09;&#xff0c;column key&#xff08;column family和qualifier&#xff09;和TimeStamp&#xff08;时间戳&#xff09;这个三个维度可以对HBase中的数据进行快速定位。 HBase中row…

中国能源网络安全大会举办,腾讯安全曹文炎分享助力能源企业安全建设的实践经验

2023年4月20日-21日&#xff0c;由中国能源研究会主办的“2023年中国能源网络安全大会”&#xff08;以下简称“大会”&#xff09;在南京召开。大会以“新形势新安全”为主题&#xff0c;围绕提升我国能源行业网络安全水平&#xff0c;增强和维护我国能源网络安全能力&#xf…

Pytorch的CNN,RNNLSTM

CNN 拿二维卷积举例&#xff0c;我们先来看参数 卷积的基本原理&#xff0c;默认你已经知道了&#xff0c;然后我们来解释pytorch的各个参数&#xff0c;以及其背后的计算过程。 首先我们先来看卷积过后图片的形状的计算&#xff1a; 参数&#xff1a; kernel_size &#xff…

【AI炼丹术】写深度学习代码的一些心得体会

写深度学习代码的一些心得体会 体会1体会2体会3总结内容来源 一般情况下&#xff0c;拿到一批数据之后&#xff0c;首先会根据任务先用领域内经典的Model作为baseline跑通&#xff0c;然后再在这个框架内加入自己设计的Model&#xff0c;微调代码以及修改一些超参数即可。总体流…

Matlab进阶绘图第18期—相关性气泡热图

相关性气泡热图是一种特殊的气泡热图。 与一般的气泡热图相比&#xff0c;其数值位于[-1 1]区间&#xff0c;其颜色用于表示正负&#xff0c;而其气泡的大小用于表示数值绝对值的大小&#xff0c;可以十分直观地对两个变量的相关性进行分析。 由于Matlab中未收录相关性气泡热…