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)分别表示每一行的起始值,每个组有1e18+1列,第i行第j(0<=j<=1e18)列的值为s[i]+j,有q组询问(q<=1e5),每组询问给出两个值l,r,问每一行的第 l 列到第 r 列有多少个不同的值。
思路:题意很简单,但看到数据量,q<=1e5,就要想到能不能预处理之类的。显然问题在于每一行可能出现数据交叉的情况,先将s数组按升序排列,每一行最多有w=r-l+1个不同的数,不访从最后一行开始,即第n行有w个不同的数,则第i(1<=i<n)行有min(si+1-si,w)个数(与前面已经出现的数不同),显然这里的si+1-si是可以提前算出来的,那么我们用di=di+1-di,然后将d[i]按升序排序,sum[i]表示前i个d[i]之和。这样在询问的时候输入得到w,然后只需二分查找到第一个di>=w即可。
AC代码:
#include<bits/stdc++.h>
using namespace std; typedef long long LL;
int n,q;
LL s[],d[],sum[]; int main(){
scanf("%d",&n);
for(int i=;i<=n;++i)
scanf("%lld",&s[i]);
sort(s+,s+n+);
for(int i=;i<n;++i)
d[i]=s[i+]-s[i];
sort(d+,d+n);
for(int i=;i<n;++i)
sum[i]=sum[i-]+d[i];
scanf("%d",&q);
while(q--){
LL t1,t2,w;
scanf("%lld%lld",&t1,&t2);
w=t2-t1+;
d[n]=w;
int l=,r=n,m;
while(l<=r){
m=(l+r)>>;
if(d[m]>=w) r=m-;
else l=m+;
}
printf("%lld ",sum[l-]+w*(n-l+));
}
printf("\n");
return ;
}
cf-Global Round2-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 ...
- Codeforces Global Round 2 D. Frets On Fire (动态开点线段树,沙雕写法)
题目链接:D. Frets On Fire 思路:明明可以离散化+二分写,思路硬是歪到了线段树上,自闭了,真实弟弟,怪不得其他人过得那么快 只和查询的区间长度有关系,排完序如果相邻的两个点的差值小于等 ...
- D. Frets On Fire 前缀和+二分
这个题真的难了我一天了,这种方法一开始没想出来,后来看了题解后明白了大致思路开始自己做但是!!!但是自己实现的时候老是一些细节出错!!!,调bug调了得有一个小时,蠢死了,这道题我一定要好好总结,总结 ...
- cf1119d Frets On Fire 前缀和+二分
题目:http://codeforces.com/problemset/problem/1119/D 题意:给一个数n,给出n个数组的第一个数(a[0]=m,a[1]=m+1,a[2]=m+2,... ...
- 【Cf #503 B】The hat(二分)
为什么Cf上所有的交互题都是$binary \; Search$... 把序列分成前后两个相等的部分,每一个都可以看成一条斜率为正负$1$的折线.我们把他们放在一起,显然,当折线的交点的横坐标为整数时 ...
- (困难) CF 484E Sign on Fence,整体二分+线段树
Bizon the Champion has recently finished painting his wood fence. The fence consists of a sequence o ...
- 【CF1119D】Frets On Fire
题目大意:给定一个长度为 n 的序列,给定一个恒定的 w,求解 \[\sum\limits_{i=1}^{n}min\{d[i],w\}\] 题解:学会了对最小值和式的快速处理. 若在下标的角度考虑, ...
- [题解向] CF#Global Round 1の题解(A $\to$ G)
这里是总链接\(Link\). \(A\) 题意:求\(\sum_{i=1}^{k} a_i\times b^{k-i}\)的奇偶性, \(k = \Theta(n \log n)\) --其实很容易 ...
- CF R 639 div2 F Review 贪心 二分
LINK:Résumé Review 这道题让我眼前一亮没想到二分这么绝. 由于每个\(b_i\)都是局部的 全局只有一个限制\(\sum_{i=1}^nb_i=k\) 所以dp没有什么用 我们只需要 ...
随机推荐
- Python基础6 面向对象编程
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...
- [记录] 解决img的1px空白问题
第一种解决方案:把img变成块元素:display:block: 第二种解决方案:修改一下它的垂直对齐方式:vertical-align:middle: 第三种解决方案:使用浮动,让他漂浮起来:flo ...
- 正则表达式——WPF输入控件TextBox 限定输入特定字符
概念: 正则表达式是对字符串操作的一种逻辑公式, 就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”, 这个“规则字符串”用来表达对字符串的一种过滤逻辑. 目的: 给定一个正 ...
- 多媒体基础知识之PCM数据《 转》
多媒体基础知识之PCM数据 1.什么是PCM音频数据 PCM(Pulse Code Modulation)也被称为脉冲编码调制.PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样.量化 ...
- static,final的用法
static的用法:修鉓符,修鉓属性,方法,代码块a1.修鉓属性:该属性是一个静态的属性,叫类的成员(没有static修鉓的属性叫实例的成员,调用时用:对象名.属性),调用:类名.属性.a2.修鉓方法 ...
- windows7 安装虚拟机,xsheel连接不上的问题,记录一下
安装了好久,一直连接不上...,原来是网络没开..重新安装设置就可以了!!!记录一下
- Linux下Mongodb安装和启动配置 原
1.安装 略 2.配置 01.mkdir /usr/local/mongodb/data 0.touch /usr/local/mongodb/logs 03.cd /usr/local/mongod ...
- centos磁盘空间重新分配
将/home目录压缩一部分空间到/ ref: https://serverfault.com/a/811124/434124 https://stackoverflow.com/a/19969471/ ...
- es查询时报 Data too large
报错如下: 原因: https://www.cnblogs.com/jiu0821/p/6526930.html 参数 indices.fielddata.cache.size 控制有多少堆内存是分配 ...
- How to Pronounce the Letters NG – No Hard G
How to Pronounce the Letters NG – No Hard G Share Tweet Share Most of the time when you see the lett ...