hdu5875 Function

来源:互联网 发布:免费微信多开软件 编辑:程序博客网 时间:2024/05/20 09:08

hdu5875

题目

给你一个序列,求F(l,r)也就是a[l]%a[i+1]%a[i+2]….%a[r]的结果

思路

一开始就想到对于a被b取模,那么之后比b大的就没必要再取模了,但是想不到怎么确定之后的比他小的,于是就走远了。
然就就是队友先处理一下每个数字下一步跳到哪里,但后就过了。。。。。
感觉还是要先试一试。。。。

代码

#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <vector>#include <cmath>using namespace std;typedef long long ll;const int maxn=100010;int a[maxn];int b[maxn];int main(){    int T;    scanf("%d",&T);    while(T--)    {        int n;        scanf("%d",&n);        for(int i=1; i<=n; i++)            scanf("%d",&a[i]);        for(int i=1; i<=n; i++)        {            int temp=n+1;            for(int j=i+1; j<=n; j++)            {                if(a[i]>a[j])                {                    temp=j;                    break;                }            }            b[i]=temp;        }        int m;        scanf("%d",&m);        for(int i=0; i<m; i++)        {            int l,r;            scanf("%d %d",&l,&r);            int ans=a[l];            for(int j=l+1; j<=r;)            {                ans%=a[j];                j=b[j];            }            printf("%d\n",ans);        }    }    return 0;}
0 0
原创粉丝点击