CodeChef Gcd Queries
2015-02-21 13:10
1061 查看
Gcd QueriesProblem code: GCDQ | Submit All Submissions |
All submissions for this problem are available.
Read problems statements in Mandarin Chinese and Russian.
You are given an array A of integers of size N. You will be given Q queries where each query is represented by two integers L, R. You have to find the gcd(Greatest Common Divisor) of the array after excluding the part from range L to R inclusive (1 Based indexing). You are guaranteed that after excluding the part of the arrayremaining array is non empty.
Input
First line of input contains an integer T denoting number of test cases.For each test case, first line will contain two space separated integers N, Q.
Next line contains N space separated integers denoting array A.
For next Q lines, each line will contain a query denoted by two space separated integers L, R.
Output
For each query, print a single integer representing the answer of that query.Constraints
Subtask #1: 40 points2 ≤ T, N ≤ 100, 1 ≤ Q ≤ N, 1 ≤ A[i] ≤ 105
1 ≤ L, R ≤ N and L ≤ R
Subtask #2: 60 points
2 ≤ T, N ≤ 105, 1 ≤ Q ≤ N, 1 ≤ A[i] ≤ 105
1 ≤ L, R ≤ N and L ≤ R
Sum of N over all the test cases will be less than or equal to 106.
Example
Input: 1 3 3 2 6 9 1 1 2 2 2 3 Output: 3 1 2
Explanation
For first query, the remaining part of array will be (6, 9), so answer is 3.For second query, the remaining part of array will be (2, 9), so answer is 1.
For third query, the remaining part of array will be (2), so answer is 2.
Warning : Large IO(input output), please use faster method for IO.
求一个序列删去L~R后其余数的GCD ,,直接预处理一下前序GCD,后序GCD就OK~
#include <bits/stdc++.h> using namespace std; const int N = 100010; int e ,L ,R ,n,Q; void Run() { scanf("%d%d",&n,&Q); for( int i = 1 ; i <= n ; ++i ) scanf("%d",&e[i]); L[1] = e[1]; for( int i = 2 ; i <= n ; ++i ) L[i] = __gcd( e[i] , L[i-1] ) ; R = e ; for( int i = n-1 ; i >= 1 ; --i ) R[i] = __gcd( e[i] , R[i+1] ) ; while(Q--){ int x , y ; scanf("%d%d",&x,&y); if( x > 1 ) { if( y < n )printf("%d\n",__gcd(L[x-1],R[y+1])); else printf("%d\n",L[x-1]); } else { if( y < n )printf("%d\n",R[y+1]); else puts("1"); } } } int main() { int _ , cas = 1 ; scanf("%d",&_); while(_--)Run(); }
View Code
相关文章推荐
- CodeChef Sereja and GCD
- 【欧拉筛+主席树】CodeChef PRMQ Chef and Prime Queries
- codechef Xor Queries (可持久化字典树)
- Chef and Prime Divisors Problem code: CHAPD (GCD问题)
- CF&&CC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries
- 【树上gcd】codechef DGCD
- CodeChef GCD2
- 【线段树区间单点更新加约束条件】Range Minimum Queries CodeChef - ANDMIN
- codechef Dynamic GCD [树链剖分 gcd]
- codechef Tree and Queries Solved
- codechef GCD2 无穷大数的最大公约数
- Codechef Xor Queries(可持久化字典树)
- codechef 3D Queries(MGCH3D)
- [点分树] Codechef December Challenge 2017. Chef, Leonardo And Queries
- CodeChef DGCD Dynamic GCD
- codechef营养题 第三弹
- 【数学】codeforces C. Maximal GCD
- CodeChef - COUNTARI Arithmetic Progressions FFT 分块
- [CodeChef - GERALD07 ] Chef and Graph Queries
- Bear and Clique Distances CodeChef - CLIQUED (最短路)