这两题其实是不一样的两道题。。
然而我还是想把他们放在一起。。
因为他们都用到了裴蜀定理

ORZ TKJ

其实我的辣鸡理解就是:几个数加加减减,最小的数就是他们的最大公倍数

然后这两题就好做了

前者用个线段树维护一下,根据更相减损术,差分以后加上原来的一个数的gcd就是序列的gcd
因为是差分,所以修改就是改两个数就好了

#include<cstdio>
#include<cstring>
const int N=100005;
int n,m;
int a[N];
struct qq
{int l,r;int c;int s1,s2;
}s[N*2];int num=0;
int f[N];//用树状数组差分维护原序列
int abs (int x){return x<0?-x:x;}
int gcd(int x,int y){return y==0?x:gcd(y,x%y);}
void bt (int l,int r)
{int aa=++num;s[aa].l=l;s[aa].r=r;if (l==r){s[aa].c=a[l]-a[l-1];return ;}int mid=(l+r)>>1;s[aa].s1=num+1;bt(l,mid);s[aa].s2=num+1;bt(mid+1,r);s[aa].c=gcd(s[s[aa].s2].c,s[s[aa].s1].c);
}
int lb (int x){return x&(-x);}
void add (int x,int y){while (x<=n){f[x]+=y;x+=lb(x);}}
int get (int x)
{int lalal=0;while (x>=1){lalal=lalal+f[x];x-=lb(x);}return lalal;
}
int Get(int now,int l,int r)
{if (l>r) return 0;if (s[now].l==l&&s[now].r==r)   return s[now].c;int s1=s[now].s1,s2=s[now].s2;int mid=(s[now].l+s[now].r)>>1;if (r<=mid) return Get(s1,l,r);else if (l>mid) return Get(s2,l,r);else return gcd(Get(s1,l,mid),Get(s2,mid+1,r));
}
void change (int now,int x,int z)
{if (s[now].l==s[now].r){s[now].c+=z;return ;}int s1=s[now].s1,s2=s[now].s2;int mid=(s[now].l+s[now].r)>>1;if (x<=mid) change(s1,x,z);else change(s2,x,z);s[now].c=gcd(s[s1].c,s[s2].c);
}
int main()
{scanf("%d%d",&n,&m);for (int u=1;u<=n;u++)scanf("%d",&a[u]);bt(1,n);for (int u=1;u<=n;u++)add(u,a[u]-a[u-1]);while (m--){int op,l,r;scanf("%d%d%d",&op,&l,&r);if (op==1)printf("%d\n",abs(gcd(get(l),Get(1,l+1,r))));else{int x;scanf("%d",&x);add(l,x);change(1,l,x);if (r<n){add(r+1,-x);change(1,r+1,-x);}}}return 0;
}

然后后者就直接用map看一下那个因子出现了多少次,大于k次且最大就是答案了

#include<cstdio>
#include<map>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k;
map<int,int> a;
int main()
{scanf("%d%d",&n,&k);for (int u=1;u<=n;u++){int x;scanf("%d",&x);for (int i=1;i*i<=x;i++){if (x%i==0){a[i]++;if (i*i!=x)a[x/i]++;}}}for (map<int,int>::reverse_iterator it=a.rbegin();it!=a.rend();it++){if (it->second>=k){printf("%d",it->first);break;}}return 0;
}

5028: 小Z的加油店2257: [Jsoi2009]瓶子和燃料相关推荐

  1. BZOJ 2257: [Jsoi2009]瓶子和燃料【数论:裴蜀定理】

    2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1326  Solved: 815 [Submit][St ...

  2. bzoj 2257: [Jsoi2009]瓶子和燃料(裴蜀定理)

    2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1342  Solved: 823 [Submit][St ...

  3. BZOJ 2257: [Jsoi2009]瓶子和燃料

    题目大意: 有n个数,选择k个数,最大化这些数通过加减能得到的最小的正整数. 题解: 这些数通过加减能得到的最小的数为他们的最大公约数. 题目要求n个数字中选择k个使得他们的最大公约数最大. 枚举所有 ...

  4. bzoj 2257[Jsoi2009]瓶子和燃料 数论/裴蜀定理

    题目 Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1< ...

  5. [luogu4571 JSOI2009] 瓶子和燃料 (数论)

    传送门 Solution 题目说的很迷,但可以发现两个瓶子互相倒最少是容积的gcd 那么题目就转化为求其中选k个瓶子gcd的最大值,这个可以分解因数,枚举因数得到 Code //By Menteur_ ...

  6. [JSOI2009]瓶子和燃料【数论】

    Pro QwQ Sol 手推几组数据就可以发现:答案即为k个数的gcd 所以爆搜出k个出,再暴力求gcd可以过部分数据-- 正解好像和裴蜀定理有关:把n个数的因子都求出来,找出满足因子个数大于等于k的 ...

  7. P1494 小Z的袜子

    P1494 小Z的袜子 莫队板子题,对询问进行排序+分块,从而得到巧妙的复杂度 对于L,R的询问. 设其中颜色为x,y,z的袜子的个数为a,b,c... 那么答案即为 (a*(a-1)/2+b*(b- ...

  8. 【0521模拟赛】小Z爱划水

    题目描述 小Z和其它机房同学都面临一个艰难的抉择,那就是 要不要划水? 每个人都有自己的一个意见,有的人想做题,有的人想划水. 当然,每个人只能选择一个事情做.如果一个人做的事情和他想做的不同,那么他 ...

  9. 【0521模拟赛】小Z爱数学

    题目描述 小Z想求F(n,k),F(n,k)表示n的所有因数pi中,满足n/pi <= k 的和. 小Z发现还是很水,所以他决定加大难度. 求 小Z还准备了很多个询问.现在你来解决一下吧. 输入 ...

  10. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 9894  Solved: 4561 [Su ...

最新文章

  1. 一个古老的问题HashMap与Hashtable区别
  2. 3000 字推荐一个可视化神器,50 行 Python 代码制作数据大屏
  3. 【面试】足够应付面试的Spring事务源码阅读梳理(建议珍藏)
  4. XT910开通了GPRS却上不了网的原因--“数据漫游”功能关闭导致的
  5. [每天一个知识点]1-程序员的三大美德(1)
  6. Array.Resize(ref arry, size);
  7. 如何用SPSS做协方差分析?超详细图文教程
  8. 曾小伟:谁没被“不可思议”的薪资吸引过?
  9. dairy-20110419-每日总结
  10. 视觉SLAM笔记(5) 编程基础
  11. Java 人工智能开发实习生_2018Java研发实习内推:阿里美团百度 均拿offer
  12. 22解析函数的级数表示(一)
  13. 《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》读书笔记
  14. 操作系统添加系统调用+内核编译
  15. MobaXterm复制黏贴快捷键
  16. easyboot的一个严重不足
  17. 七年之痒,从小米6看小米公司的善与罪
  18. 13.歌手大赛计分程序。
  19. 【HUST】网安|操作系统实验|实验一 内核编译、系统调用、编写批处理脚本
  20. YOLOv5实现目标坐标打印并输出CSV文件

热门文章

  1. 两台主机如何共享一套键鼠一台显示器?
  2. 高盛:云计算市场2021年将增至1160亿美元 四巨头成赢家
  3. 转载:声优 - 野上ゆかな
  4. 机器人断指_揭秘我国机器人发展历程:从机械手到服务机器人
  5. 【历史上的今天】10 月 27 日:世界上第一次网络瘫痪;网络广告的诞生;短视频鼻祖 Vine 关闭
  6. 有理数加法C语言pta,有理数
  7. python queue put阻塞_python queue length_queue length_python queue put
  8. javascript文字特效
  9. WPF半圆形导航菜单
  10. 加州大学洛杉机分校计算机科学,加州大学洛杉矶分校计算机科学排名第14(2020年TFE美国排名)...