首页 > 其他分享 >[SDOI2014]数表

[SDOI2014]数表

时间:2022-12-14 20:58:15浏览次数:40  
标签:const int res num SDOI2014 query 数表

链接:https://www.luogu.com.cn/problem/P3312 题目描述:求$\sum_{i=1}^{n}\sum_{j=1}^{m}d(gcd(i,j))[d(gcd(i,j))<=a]$ 题解:我们先会有一个直观的想法:先不考虑$a$的限制: $\qquad\sum_{i=1}^{n}\sum_{j=1}^{m}d(gcd(i,j))$ $\quad=\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d|gcd(i,j)}d$ $\quad=\sum_{d=1}^{n}\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor$ 如果你这么推就推不下去了。 考虑换一种思路,将$d$看作一个不能拆开的函数: $\qquad\sum_{i=1}^{n}\sum_{j=1}^{m}d(gcd(i,j))$ $\quad=\sum_{t=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)==t]d(t)$ $\quad=\sum_{t=1}^{n}\sum_{i=1}^{\lfloor\frac{n}{t}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{t}\rfloor}[gcd(i,j)==1]d(t)$ $\quad=\sum_{t=1}^{n}d(t)\sum_{i=1}^{\lfloor\frac{n}{t}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{t}\rfloor}\sum_{s|gcd(i,j)}μ(s)$ $\quad=\sum_{t=1}^{n}d(t)\sum_{s=1}^{n}μ(s)\lfloor\frac{n}{ts}\rfloor\lfloor\frac{m}{ts}\rfloor$ $\quad=\sum_{T=1}^{n}\sum_{t|T}d(t)μ(\frac{T}{t})\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor$ 我们可以将所有数按$d(x)$的值排序,将询问也按$a$排序,用树状数组处理贡献即可。 ``` #include #include #define N 100000 using namespace std; struct node { long long x,y,a,num; bool operator < (const node &t)const { return a<t.a; }="" };="" struct="" reads="" {="" long="" num,data;="" bool="" operator="" <="" (const="" &a)const="" return="" data<a.data;="" node="" query[1000001];="" top[1000001];="" c[1000001],res,f[1000001],miu[1000001],mod;="" unsigned="" ans[1000001];="" prime[1000001];="" int="" lowbit(int="" x)="" x&(-x);="" void="" add(int="" x,int="" y)="" for="" (;x<="N;x+=lowbit(x))" c[x]+="y;" return;="" sum(int="" res="0;" (;x="">=1;x-=lowbit(x)) res+=c[x]; return res; } void prework() { for (int i=1;i<=N;++i) miu[i]=1; for (int i=2;i<=N;++i) if (!prime[i]) for (int j=i;j<=N;j+=i) { prime[j]=1; if ((j/i)%i==0) miu[j]=0; miu[j]=-miu[j]; } for (int i=1;i<=N;++i) for (int j=i;j<=N;j+=i) f[j]+=i; for (int i=1;i<=N;++i) { top[i].num=i; top[i].data=f[i]; } sort(top+1,top+N+1); return; } int main() { prework(); int t,pos=0,last; mod=(1ll<<31); cin>>t; for (int i=1;i<=t;++i) { cin>>query[i].x>>query[i].y>>query[i].a; query[i].num=i; } sort(query+1,query+t+1); for (int q=1;q<=t;++q) { while (pos

标签:const,int,res,num,SDOI2014,query,数表
From: https://www.cnblogs.com/zhouhuanyi/p/16983494.html

相关文章

  • 滴水3.权限控制+虚函数表
    1.头文件的引入使得结构简洁 2.私有与公共3.私有的如何访问   4.私有的优势5.类与结构区别  成员权限区别继承权限    默认继承私有6.私有是否可以被继承 ......
  • 课程设计题二:7人多数表决器
    要求:1、7人多数表决逻辑:多数通过。2、在主持人控制下,10秒内表决有效。3、采用数码管显示表决10秒倒计时。4、表决结束后用发光二极管及数码管显示表决结果,数码管显示结果:通......
  • C++面经:C++多态-----虚函数、虚函数表、虚函数指针、虚继承
    1.虚函数引入类中之后,类会发生什么变化?首先我们创建一个空类A,然后创建一个类的对象a,并打印它的占用空间大小---为1   我们再往类中添加两个成员函数后,再返回对象......
  • 输入一个整数n,代表班级人数 再输入n个整数表示学生成绩
    #include<stdio.h>main(){inta[100],i,n,sum=0,over_ave=0,below_ave=0;floatave,g,h;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);sum=sum+......
  • C++溢出对象虚函数表指针
      C++一特性是通过virtual关键字实现运行时多态,虽然自己用到这个关键字的机会不多,但很多引用的第三方库会大量使用这个关键字,比如MFC...如果某个函数由virtual关键字修......
  • shell之函数表示方法
    ​​共有三种表示方法,分别如下:​​1.function+函数名()+{}functionpxe_config(){xxxxxxxxxxxxx}2.function+函数名+{}functionpxe_config{xxxxxxxxxxxxx}3.函......
  • IEEE的浮点数表示
    存储格式如下(32位的float为例):3231~2322~0SEM数值计算公式:V=(-1)^S*M*2^E类似数学中的科学表示法,但是换成二进制的,S是符号,用来表示正......
  • C++多继承下,派生类对象有几张虚函数表?
    #include<iostream>#include<string>#include<typeinfo>usingnamespacestd;//基类classBase1{public:Base1():x(1){}virtualvoidplay(){cout<<"Base1::p......
  • Luogu P3313 [SDOI2014]旅行
    题目链接:​​传送门​​动态开点+树剖的模板吧。都很熟的话就挺好写的特别注意在dfs序上修改#include<iostream>#include<cstdio>#include<cstring>#include<cstdli......
  • BZOJ 2111([ZJOI2010]Perm 排列计数-乘法逆元+完全二叉树模型+数列分数表示法)
    2111:[ZJOI2010]Perm排列计数TimeLimit: 10Sec  MemoryLimit: 259MBSubmit: 478  Solved: 283[​​Submit​​][​​Status​​][​​Discuss​​]......