题解:CF1119D Frets On Fire
大水题。
首先,若区间内只有一根弦,不会对答案有贡献。
我们思考如何对答案产生贡献。我们知道,对于每一个 \(s_i\),都会产生一段 \(s_i+r-l\) 的连续序列,在对 \(s\) 数组排序后,若每个 \(s_i+r-l \ge s_{i+1}\) 则答案为 \(s_n+r-(s_1+l)+1\)。
若够不到下一位呢?我们在 \(s_n+r-(s_1+l)+1\),上减去够不到的位数即可。
过程的实现:我们先对 \(s\) 数组排序,将 \(s_{i+1}-s_i \ge 2\) 的 \(s_{i+1}-s_i\) 压入 \(c\) 数组中,对 \(c\) 排序,并且求其前缀和数组 \(sum\)。设 \(c\) 数组长度为 \(m\)。
对于询问 \(l,r\),若 \(r-l\) 大于 \(c_m\),二分查找 \(c\) 数组中第一个大于 \(r-l\) 的数,\(c_x\)。够不到的位数即为 sum[m]-sum[x-1]-ch*(m-x+1)
。用 \(s_n+r-(s_1+l)+1\) 减去即可。反之,输出 \(s_n+r-(s_1+l)+1\) 即可。
代码(讲的很详细了不放注释了):
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+7;
int a[N],sum[N],c[N];
int n,m;
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
for(int i=2;i<=n;i++) {
if(a[i]-a[i-1]>1) c[++m]=a[i]-a[i-1]-1;
}
sort(c+1,c+1+m);
for(int i=1;i<=m;i++) sum[i]=sum[i-1]+c[i];
int qu;
cin>>qu;
while(qu--){
int l,r;
cin>>l>>r;
int ch=r-l,ans=a[n]+r-a[1]-l+1;
if(ch<c[m]) {
int w=upper_bound(c+1,c+1+m,ch)-c;
// cout<<w<<'\n';
int su=sum[m]-sum[w-1]-ch*(m-w+1);
ans-=su;
}
cout<<ans<<' ';
}
return 0;
}
题解:CF1119D Frets On Fire的更多相关文章
- cf1119d Frets On Fire 前缀和+二分
题目:http://codeforces.com/problemset/problem/1119/D 题意:给一个数n,给出n个数组的第一个数(a[0]=m,a[1]=m+1,a[2]=m+2,... ...
- Codeforces Global Round 2 D. Frets On Fire (动态开点线段树,沙雕写法)
题目链接:D. Frets On Fire 思路:明明可以离散化+二分写,思路硬是歪到了线段树上,自闭了,真实弟弟,怪不得其他人过得那么快 只和查询的区间长度有关系,排完序如果相邻的两个点的差值小于等 ...
- D. Frets On Fire 【二分,前缀和】 (Codeforces Global Round 2)
题目传送门:http://codeforces.com/contest/1119/problem/D D. Frets On Fire time limit per test 1.5 seconds ...
- 【CF1119D】Frets On Fire
题目大意:给定一个长度为 n 的序列,给定一个恒定的 w,求解 \[\sum\limits_{i=1}^{n}min\{d[i],w\}\] 题解:学会了对最小值和式的快速处理. 若在下标的角度考虑, ...
- D. Frets On Fire 前缀和+二分
这个题真的难了我一天了,这种方法一开始没想出来,后来看了题解后明白了大致思路开始自己做但是!!!但是自己实现的时候老是一些细节出错!!!,调bug调了得有一个小时,蠢死了,这道题我一定要好好总结,总结 ...
- cf-Global Round2-D. Frets On Fire(二分)
题目链接:http://codeforces.com/contest/1119/problem/D 题意:给n(<=1e5)个数s[i],i=1..n,(0<=s[i]<=1e18) ...
- CF1119 Global Round 2
CF1119A Ilya and a Colorful Walk 这题二分是假的.. \(1,2,1,2,1\) 有间隔为 \(3\) 的,但没有间隔为 \(2\) 的.开始被 \(hack\) 了一 ...
- Codeforces Global Round 2 题解
Codeforces Global Round 2 题目链接:https://codeforces.com/contest/1119 A. Ilya and a Colorful Walk 题意: 给 ...
- Codeforces Global Round 2部分题解
传送门 好难受啊掉\(rating\)了-- \(A\ Ilya\ and\ a\ Colorful\ Walk\) 找到最后一个与第一个颜色不同的,比一下距离,然后再找到最左边和最右边与第一个颜色不 ...
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
随机推荐
- linux tmux 使用教程
前言 Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具. 本文介绍如何使用 Tmux. 一.Tmux 是什么? 1.1 会话与进程 命令行的典型使用 ...
- Django实战项目-学习任务系统-用户注册
接着上期代码框架,开发第2个功能,用户注册,在原有用户模型基础上,增加一个学生用户属性表,用来关联学生用户的各种属性值,这个属性表是参考网络小说里系统属性值设计的,方便直观了解用户的能力高低,等级以及 ...
- 如何学习 ROS+PX4
博客地址:https://www.cnblogs.com/zylyehuo/ 参考 https://www.bilibili.com/video/BV1vx4y1Y7Tu?spm_id_from=33 ...
- oracle的各版本的名称
我最早接触的是oracle的版本8那个时候是8i i是internet后来是9i然后到10,就是版本10g g是grid的意思然后是11g然后12就变成了C,就是12c c是cloud的意思然后后面的 ...
- 【Git】在 Eclipse 中使用 Git
在 Eclipse 中使用 Git Eclipse 中默认自带了 Git 插件,通过点击 Help→About Eclipse IDE 可以查看 1 全局配置 1.1 配置用户名和邮箱 点击 Wind ...
- 【SpringCloud】版本选择
版本选择 从2.2.x和H版开始说起 SpringBoot版本选择 git源码地址 https:github.com/spring-projects/spring-boot/releases/ Spr ...
- 【QT】Linux下安装QT开发环境
Linux下安装QT开发环境 零.下载安装包 从以下网址可以下载QT的所有版本: https://download.qt.io/ 这次演示安装5.9.0版本,因为是长期支持的版本,所以进入到archi ...
- Sunshine+Moonlight让安卓Pad或IPad变6ms低延迟高质量无线显示器 #串流 #无线副屏
1.背景 最近看到多个博主在分享局域网或者公网使用Sunshine+Moonlight串流技术,将电脑画面投屏到其他屏幕(电视.安卓和苹果平板等等),宣称是个位数的延迟,并且能用平板打steam游戏( ...
- @Transactional的属性
@Transactional的属性: isolation-Isolation:事务的隔离级别(与并发相关) noRollbackFor-Class[]:那些异常,事务可以不回滚 noRollbackF ...
- Java 中的 young GC、old GC、full GC 和 mixed GC 的区别是什么?
Java 中的 young GC.old GC.full GC 和 mixed GC 的区别 在 Java 中,垃圾回收(GC)可以分为几种不同类型,包括 young GC.old GC.full G ...