首页 > 其他分享 >题解:CF1119D Frets On Fire

题解:CF1119D Frets On Fire

时间:2024-05-26 11:55:53浏览次数:24  
标签:ch Fire 题解 CF1119D cin int 数组 排序 sum

大水题。

首先,若区间内只有一根弦,不会对答案有贡献。

我们思考如何对答案产生贡献。我们知道,对于每一个 \(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;
}

标签:ch,Fire,题解,CF1119D,cin,int,数组,排序,sum
From: https://www.cnblogs.com/shootdown/p/18213488

相关文章

  • UVA11922 Permutation Transformer 题解
    题目传送门前置知识无旋treap解法与luoguP3391【模板】文艺平衡树不同的是本题翻转后需要放到整个序列的末尾。由于需要翻转后放到末尾,故无旋Treap在维护文艺平衡树的过程中合并时跳着合并即可。代码#include<bits/stdc++.h>usingnamespacestd;#definelllong......
  • 题解【CF798D Mike and distribution】
    题目链接思考方向:构造方法满足\(A\)的要求,再满足\(B\)的要求。如果只考虑\(A\),有一种显然的方案:将\(A\)从大到小排序,选出前\(\left\lfloor\frac{n}{2}\right\rfloor+1\)大的即可。但这样显然难以扩展,所以需要另寻方案。由于题目提供了额外的\(+1\),所以先将最大的......
  • UVA1674 闪电的能量 Lightning Energy Report 题解
    题目传送门前置知识树链剖分|线段树解法树链剖分后维护一个支持区间修改,单点查询的线段树即可。也可以树上差分,同146.DFS序3,树上差分1的\(1,2\)操作,时间复杂度比树链剖分更优。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#define......
  • CF1141E Superhero Battle 题解
    题目传送门简化题意给定\(H,n\)和一个长度为\(n\)的序列\(d\),求一个最小的\(m\)使得\(H+\sum\limits_{i=1}^{m}d_{(i-1)\bmodn+1}\le0\)。解法将式子移项后得到\(\sum\limits_{i=1}^{m}-d_{(i-1)\bmodn+1}\geH\)。将\(\sum\limits_{i=1}^{m}-d_{(i-1)\bmo......
  • SP14943 DRTREE - Dynamically-Rooted Tree 题解
    题目传送门前置知识树链剖分|线段树解法树剖换根,子树查询板子。类似换根DP的思路,我们发现换根后仅有祖先、子树、深度等会随祖先的变化而变化。设\(rt_{i}\)表示第\(i\)次操作的树根,\(x_{i}\)表示第\(i\)次操作的节点。接着进行大力分讨。当\(rt_{i}=x_{i}\)......
  • 图的dfs遍历题解
    本蒟蒻又来做题啦!看看今天做啥题。。。。题目描述时间:1s 空间:256M题目描述:给出一个无向图和一个起点s,输出这个图从s结点开始的DFS遍历序列。规定:节点邻居按照输入的顺序遍历输入格式:共M+1行。第11行包含33个正整数N,M,s,表示有N个点,M条边,起点为s。第2~M+1行包含2个用......
  • 【题解】 [USACO 2009 Mar] Cow Frisbee Team S
    题目描述题意分析从\(N\)个整数中取若干个(不能不选),且取的数之和为\(F\)的倍数的总方案数对\(10^8\)取余的值。思路这道题是一道二维线性DP。那么根据线性DP的解题方法。首先,找出题目的阶段性。这道题显而易见方案数随着选择的个数而变化,那么这道题就以选择的个数作为阶段......
  • 【赛题解析】【网络建设与运维】2023年全国职业院校技能大赛中职组“网络建设与运维”
    在此之前,欢迎关注波比网络波比网络官方公众号:blbinet波比网络工作室官方公众号:blbistudio技能大赛各赛项交流群:https://www.blbi.cn/threads/40/更多正式赛题源文件访问:https://www.blbi.cn获取技术支持访问:https://www.blbi.cn/form/1/selectNISP、CIPS、PTE证书可......
  • 【赛题解析】【网络建设与运维】2023年全国职业院校技能大赛中职组“网络建设与运维”
    在此之前,欢迎关注波比网络波比网络官方公众号:blbinet波比网络工作室官方公众号:blbistudio技能大赛各赛项交流群:https://www.blbi.cn/threads/40/更多正式赛题源文件访问:https://www.blbi.cn获取技术支持访问:https://www.blbi.cn/form/1/selectNISP、CIPS、PTE证书可......
  • Tokio Marine & Nichido Fire Insurance Programming Contest 2024(AtCoder Beginner C
    A-WhoAtetheCake?题意:有三个嫌疑犯(1,2,3(号码))现在有两个证人他们指出谁不是嫌疑犯,你可以找到确定的那个罪人吗?找到输出这个人的号码没找到输出-1思路:如果两人指出的人是一个人则输出-1不是则输出6-a-b,因为1+2+3=6(sum)减去a,b肯定可以到达......