基础分治
Posted xwww666666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础分治相关的知识,希望对你有一定的参考价值。
我真是个垃圾,滚回去刷普及组了
1>快速幂+模运算
#include<cstdio> #include<cstdlib> using namespace std; long long a,b,k; long long q_pow(long long x,long long y) int i=0; long long j=x,sum=1; while(y) if(y&(1<<i)) y^=(1<<i); sum=sum*j%k; i++,j=j*j%k; return sum%k;//注意这里要写mod,因为如果b==0,则不会进入循环 int main() scanf("%lld%lld%lld",&a,&b,&k); printf("%lld^%lld mod %lld=%lld",a,b,k,q_pow(a%k,b)); return 0;
我好垃圾啊,水题随便一写就是一小时,难过
2>幂次方
分解成二进制数
#include<cstdio> #include<cstdlib> using namespace std; int n; int f[20001],lg[20001]; void pre() int i=1,j=0; while(i<20001) f[i]=j; i<<=1,j++; for(int i=2;i<20001;i++) lg[i]=lg[i-1]; if(f[i]) lg[i]++; void dfs(int x) if(x==1) printf("2(0)"); else if(x==2) printf("2"); else int i=lg[x]; x^=(1<<i); printf("2"); if(i>1) printf("("),dfs(i),printf(")"); while(x && --i) if(x&(1<<i)) printf("+"); printf("2"); if(i>1) printf("("),dfs(i),printf(")"); x^=(1<<i); if(x) printf("+2(0)"); int main() scanf("%d",&n); pre(); dfs(n); return 0;
3>CDQ求逆序对数
以上是关于基础分治的主要内容,如果未能解决你的问题,请参考以下文章