hdu5875思维题

来源:互联网 发布:python多进程和多线程 编辑:程序博客网 时间:2024/06/05 17:46

给你一个序列,给出询问l,r求a[l]%a[i+1]%a[i+2]….%a[r]的结果
由于取余比自己大的数没有意义,只要预处理一下,从比自己小于等于的地方开始取余就行

#include <iostream>#include <cstdio>using namespace std;const int maxn=100010;int a[maxn],b[maxn];int main(){    int t,n,m;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        for(int i=1;i<=n;i++)        scanf("%d",&a[i]);;        for(int i=1;i<=n;i++)        {            int tmp=n+1;            for(int j=i+1;j<=n;j++)            {                if(a[i]>a[j])                {                    tmp=j;                    break;                }            }            b[i]=tmp;//从tmp位置不大于a【i】        }//        for(int i=1;i<=n;i++)//        cout<<b[i]<<endl;        int l,r;        int ans;        scanf("%d",&m);        while(m--)        {            scanf("%d%d",&l,&r);            ans=a[l];            for(int j=l+1;j<=r;)            {                ans%=a[j];                j=b[j];            }            printf("%d\n",ans);        }    }    return 0;}
0 0
原创粉丝点击