zoukankan      html  css  js  c++  java
  • A

    A - Pair of Numbers
    Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u
    Submit Status
    Appoint description: 

    Description

    Simon has an array a1, a2, ..., an, consisting of n positive integers. Today Simon asked you to find a pair of integers l, r(1 ≤ l ≤ r ≤ n), such that the following conditions hold:

    1. there is integer j (l ≤ j ≤ r), such that all integers al, al + 1, ..., ar are divisible by aj;
    2. value r - l takes the maximum value among all pairs for which condition 1 is true;

    Help Simon, find the required pair of numbers (l, r). If there are multiple required pairs find all of them.

    Input

    The first line contains integer n (1 ≤ n ≤ 3·105).

    The second line contains n space-separated integers a1, a2, ..., an(1 ≤ ai ≤ 106).

    Output

    Print two integers in the first line — the number of required pairs and the maximum value of r - l. On the following line print all l values from optimal pairs in increasing order.

    Sample Input

    Input
    5
    4 6 9 3 6
    Output
    1 3
    2
    Input
    5
    1 3 5 7 9
    Output
    1 4
    1
    Input
    5
    2 3 5 7 11
    Output
    5 0
    1 2 3 4 5
     
    const int maxn = 310000;
    int num[maxn];
    int ans[maxn];
    int main() 
    {
        //freopen("in.txt","r",stdin);
        int n;
        while(cin>>n)
        {
            repf(i,1,n) scanf("%d",&num[i]);
            int Max = 0;
            int cnt = 0;
            for(int i = 1;i<=n;)
            {
                int L = i;
                int R = i;
                while(L>=1 && num[L]%num[i] == 0) L--;
                while(R<=n && num[R]%num[i] == 0) R++;
                i = R;
                R--;L++;
                if(R - L > Max)
                {
                    Max = R - L;
                    cnt = 0;
                    ans[cnt] = L;
                    cnt++;
                }
                if(R - L == Max)
                {
                    ans[cnt] = L;
                    cnt++;
                }
            }
            int sz = unique(ans,ans+cnt) - ans;
            printf("%d %d
    ",sz,Max);
            printf("%d",ans[0]);
            rep(i,1,sz) printf(" %d",ans[i]);
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    PHP 计算页面执行时间
    PHP 实现多服务器共享 SESSION 数据
    你不了解PHP的10件事情
    智能的PHP缩图类
    php配置文件php.ini 中文版
    PclZip:强大的PHP压缩与解压缩zip类
    https 加载问题
    docker 安装sentry
    requests ssl 报错
    解决长时间计划任务rsync同步进程数过多
  • 原文地址:https://www.cnblogs.com/DreamHighWithMe/p/3441549.html
Copyright © 2011-2022 走看看