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;
}