• hdu-5875


    题目大意:

    f(l,r)=a[l]   l==r

    f(l,r)=f(l,r-1)%a[r]  l<r

    思路: 由此可以推出f(l,r)=a[l]%a[l+1]%a[l+2]%....%a[r]

    根据取余的性质,只要后面取余的数不小于前面的数值不会改变,因此我们只要记录比a[l]小的第一个数,假如为a[x]然后接着找比a[x]小的第一个数

    记为a[y] 如此一直找下去直到a[r]

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    #define MAX 100005
    
    int n,q,a[MAX],nex[MAX];
    //n 数组的个数,q次查询,nex[i]=j代表a[j]是第一个小于a[i]的数
    int main()
    {
        freopen("in.txt","r",stdin);
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            memset(nex,-1,sizeof(nex));
            for(int i=1;i<=n;i++)
                scanf("%d",&a[i]);
            for(int i=1;i<=n;i++)
                for(int j=i+1;j<=n;j++)
                    if(a[i]>a[j])
                    {
                        nex[i]=j;
                        break;
                    }
            scanf("%d",&q);
            int l,r;
            while(q--)
            {
                scanf("%d%d",&l,&r);
                int ans = a[l];
                int temp = l;
                while(nex[temp]<=r&&nex[temp]!=-1)
                {
                    temp = nex[temp];
                    ans = ans%a[temp];
                }
                printf("%d
    ",ans);
            }
        }
    }
    
  • 相关阅读:
    js操作
    函数知识点补充
    css---position
    css-浮动
    css-边界重叠以及边界塌陷
    css
    css文本类型操作
    POJ 2828 线段树活用
    POJ 3468 线段树
    POJ 3013 SPFA算法,邻接表的使用
  • 原文地址:https://www.cnblogs.com/wt20/p/5861613.html
Copyright © 2020-2023  润新知