Function
Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 3113 Accepted Submission(s): 1035
Problem Description
The shorter, the simpler. With this problem, you should be convinced of this truth.
You are given an array
A of
N postive integers, and
M queries in the form
(l,r). A function
F(l,r) (1≤l≤r≤N) is defined as:
F(l,r)={AlF(l,r−1) modArl=r;l<r.
You job is to calculate
F(l,r), for each query
(l,r).
Input
There are multiple test cases.
The first line of input contains a integer
T, indicating number of test cases, and
T test cases follow.
For each test case, the first line contains an integer
N(1≤N≤100000).
The second line contains
N space-separated positive integers:
A1,…,AN (0≤Ai≤109).
The third line contains an integer
M denoting the number of queries.
The following
M lines each contain two integers
l,r (1≤l≤r≤N), representing a query.
Output
For each query
(l,r), output
F(l,r) on one line.
Sample Input
Sample Output
Source
2016 ACM/ICPC Asia Regional Dalian Online
多次查询,求a[l]%a[l+1]%...%a[r].
每次求余,若当前数比被除数大,则最多为原数一半,所以每次查询,有效的运算最多log(a[l])次。
如此,只要用线段树求区间内第一个不大于当前数的数的位置。
不断暴力查询,更新答案即可。
#include
#include
#include
#include
#include