当前位置:网站首页>Codeforces 474 F. Ant colony
Codeforces 474 F. Ant colony
2022-07-07 20:03:00 【全栈程序员站长】
大家好,又见面了,我是全栈君。
线段树求某一段的GCD…..
F. Ant colony
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Mole is hungry again. He found one ant colony, consisting of n ants, ordered in a row. Each ant i (1 ≤ i ≤ n) has a strength si.
In order to make his dinner more interesting, Mole organizes a version of «Hunger Games» for the ants. He chooses two numbers l and r(1 ≤ l ≤ r ≤ n) and each pair of ants with indices between l and r (inclusively) will fight. When two ants i and j fight, ant i gets one battle point only if si divides sj (also, ant j gets one battle point only if sj divides si).
After all fights have been finished, Mole makes the ranking. An ant i, with vi battle points obtained, is going to be freed only if vi = r - l, or in other words only if it took a point in every fight it participated. After that, Mole eats the rest of the ants. Note that there can be many ants freed or even none.
In order to choose the best sequence, Mole gives you t segments [li, ri] and asks for each of them how many ants is he going to eat if those ants fight.
Input
The first line contains one integer n (1 ≤ n ≤ 105), the size of the ant colony.
The second line contains n integers s1, s2, …, sn (1 ≤ si ≤ 109), the strengths of the ants.
The third line contains one integer t (1 ≤ t ≤ 105), the number of test cases.
Each of the next t lines contains two integers li and ri (1 ≤ li ≤ ri ≤ n), describing one query.
Output
Print to the standard output t lines. The i-th line contains number of ants that Mole eats from the segment [li, ri].
Sample test(s)
input
5
1 3 2 4 2
4
1 5
2 5
3 5
4 5
output
4
4
1
1
Note
In the first test battle points for each ant are v = [4, 0, 2, 0, 2], so ant number 1 is freed. Mole eats the ants 2, 3, 4, 5.
In the second test case battle points are v = [0, 2, 0, 2], so no ant is freed and all of them are eaten by Mole.
In the third test case battle points are v = [2, 0, 2], so ants number 3 and 5 are freed. Mole eats only the ant 4.
In the fourth test case battle points are v = [0, 1], so ant number 5 is freed. Mole eats the ant 4.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
const int maxn=100100;
typedef pair<int,int> pII;
pII b[maxn];
int n,s[maxn];
int g[maxn<<2];
int gcd(int x,int y)
{
if(x==0) return y;
return gcd(y%x,x);
}
void build(int l,int r,int rt)
{
if(l==r)
{
g[rt]=s[l];
return ;
}
int mid=(l+r)/2;
build(l,mid,rt<<1); build(mid+1,r,rt<<1|1);
g[rt]=gcd(g[rt<<1],g[rt<<1|1]);
}
int query(int L,int R,int l,int r,int rt)
{
if(r<L||l>R) return 0;
if(L<=l&&r<=R)
{
return g[rt];
}
int mid=(l+r)/2;
int u=query(L,R,l,mid,rt<<1);
int v=query(L,R,mid+1,r,rt<<1|1);
return gcd(u,v);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",s+i);
b[i]=(make_pair(s[i],i));
}
sort(b+1,b+1+n);
build(1,n,1);
int m;
scanf("%d",&m);
while(m--)
{
int Left,Right;
scanf("%d%d",&Left,&Right);
int G=query(Left,Right,1,n,1);
int from=lower_bound(b+1,b+n+1,make_pair(G,Left))-(b+1);
int to=lower_bound(b+1,b+1+n,make_pair(G,Right+1))-(b+1);
printf("%d\n",(Right-Left+1)-(to-from));
}
return 0;
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116374.html原文链接:https://javaforall.cn
边栏推荐
- Lingyun going to sea | saihe & Huawei cloud: jointly help the sustainable development of cross-border e-commerce industry
- 如何挑选基金产品?2022年7月份适合买什么基金?
- 【C语言】指针进阶---指针你真的学懂了吗?
- Micro service remote debug, nocalhost + rainbow micro service development second bullet
- Cantata9.0 | 全 新 功 能
- 想杀死某个端口进程,但在服务列表中却找不到,可以之间通过命令行找到这个进程并杀死该进程,减少重启电脑和找到问题根源。
- Guava multithreading, futurecallback thread calls are uneven
- Codesonar enhances software reliability through innovative static analysis
- Deep learning model compression and acceleration technology (VII): mixed mode
- 死锁的产生条件和预防处理[通俗易懂]
猜你喜欢
使用高斯Redis实现二级索引
【论文阅读】MAPS: Multi-agent Reinforcement Learning-based Portfolio Management System
解决使用uni-app MediaError MediaError ErrorCode -5
Optimization cases of complex factor calculation: deep imbalance, buying and selling pressure index, volatility calculation
How to meet the dual needs of security and confidentiality of medical devices?
神兵利器——敏感文件发现工具
Jenkins 用户权限管理
Details of C language integer and floating-point data storage in memory (including details of original code, inverse code, complement, size end storage, etc.)
使用高斯Redis实现二级索引
【C语言】指针进阶---指针你真的学懂了吗?
随机推荐
取两个集合的交集
凌云出海记 | 易点天下&华为云:推动中国电商企业品牌全球化
Jetty:配置连接器[通俗易懂]
Tensorflow2. How to run under x 1 Code of X
Spark judges that DF is empty
C语言多角度帮助你深入理解指针(1. 字符指针2. 数组指针和 指针数组 、数组传参和指针传参3. 函数指针4. 函数指针数组5. 指向函数指针数组的指针6. 回调函数)
【网络原理的概念】
You want to kill a port process, but you can't find it in the service list. You can find this process and kill it through the command line to reduce restarting the computer and find the root cause of
使用 BR 备份 TiDB 集群数据到 Azure Blob Storage
Klocwork code static analysis tool
Helix QAC 2020.2新版静态测试工具,最大限度扩展了标准合规性的覆盖范围
华为CE交换机下载文件FTP步骤
Meta Force原力元宇宙系统开发佛萨奇模式
Micro service remote debug, nocalhost + rainbow micro service development second bullet
开发那些事儿:Go加C.free释放内存,编译报错是什么原因?
C language helps you understand pointers from multiple perspectives (1. Character pointers 2. Array pointers and pointer arrays, array parameter passing and pointer parameter passing 3. Function point
微服务远程Debug,Nocalhost + Rainbond微服务开发第二弹
阿洛的烦恼
如何挑选基金产品?2022年7月份适合买什么基金?
Codesonar Webinar