zoukankan      html  css  js  c++  java
  • Frets On Fire(思维二分)

    D. Frets On Fire

    time limit per test

    1.5 seconds

    memory limit per test

    256 megabytes

    input

    standard input

    output

    standard output

    Miyako came to the flea kingdom with a ukulele. She became good friends with local flea residents and played beautiful music for them every day.

    In return, the fleas made a bigger ukulele for her: it has nn strings, and each string has (1018+1)(1018+1) frets numerated from 00 to 10181018. The fleas use the array s1,s2,…,sns1,s2,…,sn to describe the ukulele's tuning, that is, the pitch of the jj-th fret on the ii-th string is the integer si+jsi+j.

    Miyako is about to leave the kingdom, but the fleas hope that Miyako will answer some last questions for them.

    Each question is in the form of: "How many different pitches are there, if we consider frets between ll and rr (inclusive) on all strings?"

    Miyako is about to visit the cricket kingdom and has no time to answer all the questions. Please help her with this task!

    Formally, you are given a matrix with nn rows and (1018+1)(1018+1) columns, where the cell in the ii-th row and jj-th column (0≤j≤10180≤j≤1018) contains the integer si+jsi+j. You are to answer qq queries, in the kk-th query you have to answer the number of distinct integers in the matrix from the lklk-th to the rkrk-th columns, inclusive.

    Input

    The first line contains an integer nn (1≤n≤1000001≤n≤100000) — the number of strings.

    The second line contains nn integers s1,s2,…,sns1,s2,…,sn (0≤si≤10180≤si≤1018) — the tuning of the ukulele.

    The third line contains an integer qq (1≤q≤1000001≤q≤100000) — the number of questions.

    The kk-th among the following qq lines contains two integers lklk,rkrk (0≤lk≤rk≤10180≤lk≤rk≤1018) — a question from the fleas.

    Output

    Output one number for each question, separated by spaces — the number of different pitches.

    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
    

    Note

    For the first example, the pitches on the 66 strings are as follows.

    Frets1:s2:s3:s4:s5:s6:031415914252610253637113647481247585913586961014697107111571081181216…………………Fret01234567…s1:345678910…s2:12345678…s3:4567891011…s4:12345678…s5:56789101112…s6:910111213141516…

    There are 55 different pitches on fret 77 — 8,10,11,12,168,10,11,12,16.

    There are 1010 different pitches on frets 0,1,20,1,2 — 1,2,3,4,5,6,7,9,10,111,2,3,4,5,6,7,9,10,11.

    想了很久没想出思路

    百度了一下大神的做法才明白

    其实对于给定的l和r可以转化等效的转化为0和l-r

    然后将所有的点都排序求出所有的相邻点的差值

    并且求出一个差值的前缀和 这时我们就可以对于每一个给出的l r

    使用二分和前缀和快速求解了

    代码

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    long long a[100005];
    long long b[100005];
    long long sum[100005];
    int main()
    {
        //freopen("in.txt","r",stdin);
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%lld",&a[i]);
        sort(a+1,a+1+n);
        for(int i=1;i<n;i++)
            b[i]=a[i+1]-a[i];
        sort(b+1,b+n);
        for(int i=1;i<n;i++)
            sum[i]+=sum[i-1]+b[i];
        int q;
        scanf("%d",&q);
        while(q--)
        {
            long long  temp1,temp2;
            long long temp;
            scanf("%lld%lld",&temp1,&temp2);
            temp=temp2-temp1+1;
            int pos=upper_bound(b+1,b+n,temp)-b;
            //cout<<"sum"<<sum[pos-1]<<"er"<<temp*(n-pos+1)<<endl;
            long long ans=sum[pos-1]+temp*(n-pos+1);
            printf("%lld ",ans);
        }
    }
  • 相关阅读:
    JSP中Session的使用
    深入了解父类引用指向子类
    Gamma校正及其OpenCV实现
    cocos2d-x3.0之请求网络(phpserver)
    Quartz使用-入门使用(java定时任务实现)
    ExtJs--15--Ext.is*各种类型推断的方法,简单看源代码就能够明确了
    小谈边界问题
    VS2010旗舰版安装图解
    LSPCI具体解释分析
    兔子--gradle安装和配置
  • 原文地址:https://www.cnblogs.com/caowenbo/p/11852294.html
Copyright © 2011-2022 走看看