https://codeforces.com/contest/1119/problem/D

题意

有n个数组,每个数组大小为\(10^{18}+1\)且为等差数列,给出n个数组的\(s[i]\),q次询问,每次询问一个区间[l,r],问所有数组的[l,r]区间一共有多少不同的数

题解

  • 结果只与选择的区间长度len有关,还有和两个数组s[i]的差cha有关

    • 若len<=cha,则没有重复,即\(2*len\)
    • 若len>cha,则前面一个数组可以取满len个,后面的数组只能cha个,即\(cha+len\)
  • 根据以上规律,将a数组进行排序后差分,对差分进行排序,然后做前缀和,每次二分查找出最大的p满足b[p]<=x
  • 这里二分查找需要特判l>r的情况

代码

#include<bits/stdc++.h>
#define ll long long
#define MAXN 100005
using namespace std;
ll a[MAXN],b[MAXN],s[MAXN],q,n,x,p,ans,l,r,sz; int fd(ll x){
int l=1,r=sz-1,res=0;
while(l<r){
int mid=(l+r)/2;
if(b[mid]<=x)l=mid+1;
else r=mid;
}
if(l>r||b[l]>x)l--; //特判
return l;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
sort(a+1,a+n+1);
sz=unique(a+1,a+n+1)-(a+1);
for(int i=2;i<=sz;i++)b[i-1]=a[i]-a[i-1];
sort(b+1,b+sz);
for(int i=1;i<sz;i++)s[i]=s[i-1]+b[i];
cin>>q;
while(q--){
scanf("%lld%lld",&l,&r);
x=r-l+1;
p=fd(x);
ans=s[p]+(sz-p)*x;
printf("%lld ",ans);
}
}

Codeforces Global Round 2 D 差分 + 前缀和 + 二分的更多相关文章

  1. CodeForces Global Round 1

    CodeForces Global Round 1 CF新的比赛呢(虽然没啥区别)!这种报名的人多的比赛涨分是真的快.... 所以就写下题解吧. A. Parity 太简单了,随便模拟一下就完了. B ...

  2. Codeforces Global Round 2 题解

    Codeforces Global Round 2 题目链接:https://codeforces.com/contest/1119 A. Ilya and a Colorful Walk 题意: 给 ...

  3. Codeforces Global Round 1 (A-E题解)

    Codeforces Global Round 1 题目链接:https://codeforces.com/contest/1110 A. Parity 题意: 给出{ak},b,k,判断a1*b^( ...

  4. Codeforces Global Round 3

    Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...

  5. Codeforces Global Round 1 (CF1110) (未完结,只有 A-F)

    Codeforces Global Round 1 (CF1110) 继续补题.因为看见同学打了这场,而且涨分还不错,所以觉得这套题目可能会比较有意思. 因为下午要开学了,所以恐怕暂时不能把这套题目补 ...

  6. Codeforces Global Round 1 - D. Jongmah(动态规划)

    Problem   Codeforces Global Round 1 - D. Jongmah Time Limit: 3000 mSec Problem Description Input Out ...

  7. 【手抖康复训练1 】Codeforces Global Round 6

    [手抖康复训练1 ]Codeforces Global Round 6 总结:不想复习随意打的一场,比赛开始就是熟悉的N分钟进不去时间,2333,太久没写题的后果就是:A 题手抖过不了样例 B题秒出思 ...

  8. Codeforces Global Round 11 个人题解(B题)

    Codeforces Global Round 11 1427A. Avoiding Zero 题目链接:click here 待补 1427B. Chess Cheater 题目链接:click h ...

  9. 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 ...

随机推荐

  1. Ubuntu18.04下修改快捷键

    Ubuntu下修改快捷键 Intelij Idea在Ubuntu下的快捷键几乎和windows差不多,最常用的一个快捷键与系统冲突: Ctrl + Alt + T idea是surround with ...

  2. 如何创建一个简单 APT 仓库

    0. 无废话版本 需求: 有一堆 .deb 包,想把它们做成一个 APT 仓库,这样就可以用apk install pkgname进行安装了,这样一方面自己可以规避 dpkg -i xxx.deb 时 ...

  3. Topshelf + QuartzNet 实现挂载在 WIndows Services 中的定时任务

    直接贴代码了: 首先我们可以把所有的 Job 放到一个单独的 DLL 中,好处是可以共享这些业务 Job.比如我们新建一个 QuartzNetDemo.WinService.Jobs 的类库. 然后, ...

  4. 利用 Javascript 让 DIV 自适应屏幕的分辨率,从而决定是否显示滚动条

    直接贴代码了: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  5. Kubernetes 弹性伸缩全场景解析(三) - HPA 实践手册

    在上一篇文章中,给大家介绍和剖析了 HPA 的实现原理以及演进的思路与历程.本文我们将会为大家讲解如何使用 HPA 以及一些需要注意的细节. autoscaling/v1 实践 v1 的模板可能是大家 ...

  6. RocketMQ多master多salve集群搭建

    一.RocketMQ集群模式简介 单Master方式 风险比较大, 一旦Broker重启或者宕机, 将导致整个环境不可用, 不建议线上使用. 多Master模式 一个集群中没有slave, 全是mas ...

  7. CentOS7/Ubuntu18系统时间同步ntp(转载)

    转自  https://blog.csdn.net/u010226454/article/details/80896959 ---centos7.2上搭建ntp服务器,并实现时间同步 对于容器编排系统 ...

  8. ASP.NET MVC EF 连接数据库(一)-----Database First

    database first (VS2015 ,Sql Server2014) 1,新建MVC项目 实例:   源码代码:http://note.youdao.com/noteshare?id=1fd ...

  9. django跳转页面传参

    1.如果在反转url的时候,需要添加参数,那么可以通过传递'kwargs'参数到'reverse'函数中.实例代码: urls.py from django.urls import path, re_ ...

  10. js 设计模式——代理模式

    代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问. 生活中有很多的代理模式的场景.例如,明星有经纪人作为代理,老板有秘书作为代理等等,当有事情的时候,会找到经纪人或秘书,再由他 ...