首页 > 编程语言 >基础算法模板

基础算法模板

时间:2024-06-15 15:14:50浏览次数:19  
标签:int ll 基础 mid 算法 ans check 模板

目录

基础算法

整数二分

bool check(int x)  //检查x是否满足某种性质

int l = 1, r = n, ans = 0;
while(l <= r)
{
  int mid = (l+r)>>1;
  if(check(mid)) { ans = mid; r = mid - 1; }
  else l = mid + 1;
}
printf("%d", ans);

浮点数二分

bool check(double x)  //检查x是否满足某种性质

double l = 1, r = n;
while(l + eps < r)
{
  double mid = (l+r)/2;
  if(check(mid)) r = mid; 
  else l = mid;
}
printf("%lf", l);

//或者写成这样
double l = 1, r = n;
for(int i=1; i<=100; i++)
{
  double mid = (l+r)/2;
  if(check(mid)) r = mid; 
  else l = mid;
}
printf("%lf", l);

归并排序

void merge_sort(int q[], int l, int r)
{
    if (l >= r) return;

    int mid = l + r >> 1;
    merge_sort(q, l, mid);
    merge_sort(q, mid + 1, r);

    int k = 0, i = l, j = mid + 1;
    while(i<=mid && j<=r)
    {
        if(q[i] <= q[j]) tmp[k++] = q[i++];
        else tmp[k++] = q[j++];
    }

    while(i <= mid) tmp[k++] = q[i++];
    while(j <= r) tmp[k++] = q[j++];

    for (i=l, j=0; i<=r; i++) q[i] = tmp[j++];
}

蒙哥马利快速幂取模算法

void merge_sort(int q[], int l, int r)
{
  typedef long long ll;
  
  ll montgomery(ll a, ll b, ll c)
  {
  	ll ans = 1;
  	a = a % c;
  	while(b > 0)
  	{
  		if(b & 1) ans = (ans * a) % c;
  		b = b >> 1;
  		a = a * a % c;
  	}
  
	return ans;
}

前缀和

主要用于求数列区间和的问题,是一种重要的预处理方式

#include <bits/stdc++.h>
using namespace std;

//a为原数组,s为前缀和
int a[10] = {}, s[10] = {};

int main()
{
	for(int i=1; i<=5; i++)
	{
		scanf("%d", &a[i]);
		s[i] = s[i-1] + a[i];
	}

	int l = 2, r = 4;
	//求a数组区间[l,r]的和
	int ans = s[r] - s[l-1];
	printf("%d", ans);

	return 0;
}

标签:int,ll,基础,mid,算法,ans,check,模板
From: https://www.cnblogs.com/mz-xs/p/18249291

相关文章

  • JVM垃圾回收算法和垃圾回收器
    垃圾回收算法复制算法(Copying)将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情......
  • 本地搭建halo模板和插件开发简要步骤
    1.新建local配置文件,加载本地插件工程目录halo:plugin:runtime-mode:developmentfixed-plugin-path:#配置为插件绝对路径#-D:\myproject\hellodev\plugin-ylpro-D:\myproject\hellodev\plugin-links2.插件工程编写好处理模板的代码3.编......
  • JVM垃圾回收策略机制和算法
    判断对象的存活引用计数法给对象添加一个引用计数器,当对象增加一个引用时计数器加1,引用失效时计数器减1。引用计数为0的对象可被回收。(Python在用,但主流虚拟机没有使用)优点:快,方便,实现简单。缺陷:对象相互引用时(A.instance=B同时B.instance=A),很难判断对象是否该回收。......
  • Linux Shell基础命令
    pwd功能:显示当前目录的绝对地址cd功能:切换目录绝对路径:以/为起点,遍历到子目录相对路径:以当前目录为起点,遍历到子目录常用目录:.当前目录..上层目录-上次操作所在路径~相当于/home/用户名的路径示例用途:cd/home/linux/Desktop#绝对路径的用法cd/home/......
  • 雪花算法和UUID
    目录雪花算法概念优点和不足优点:缺点:解决方案代码示例UUID优点与不足优点不足两种算法的比较应用场景区别雪花算法概念雪花算法是一个分布式id生成算法,它生成的id一般情况下具有唯一性。由64位01数字组成,第一位是符号位,始终为0。接下来的41位是时间戳字段,根......
  • 模板
    #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>usingnamespacestd;constintN=100010,INF=1e8;intn;structNode{intl,r;intkey,val;intcnt,size;}tr[N];introot,idx;......
  • 人工智能基础课【学习笔记】 | 机器学习必备的数学基础
    在此前 4个月的时间当中,我和大家一块分享了最近火热的人工智能的技术,包括它的一些数学基础、机器学习的算法以及神经网络,还有深度学习这样一些热点的话题。俗话说得好,编筐编篓,全在收口。能在最后一次更新的时候和大家做一次这样的视频直播的分享,我觉得也是非常荣幸,能够有机会......
  • 算法第六天:力扣第977题有序数组的平方
    一、977.有序数组的平方的链接与题目描述977.有序数组的平方的链接如下所示:https://leetcode.cn/problems/squares-of-a-sorted-array/description/https://leetcode.cn/problems/squares-of-a-sorted-array/description/   给你一个按 非递减顺序 排序的整数数组 n......
  • R可视化:R语言基础图形合集
    R语言基础图形合集欢迎大家关注全网生信学习者系列:WX公zhong号:生信学习者Xiaohong书:生信学习者知hu:生信学习者CDSN:生信学习者2基础图形可视化数据分析的图形可视化是了解数据分布、波动和相关性等属性必不可少的手段。不同的图形类型对数据属性的表征各不相同,通常具体......
  • 【学习笔记】爱立信SPO 1400 CRAFT软件基础知识2一图形用户界面之菜单栏
    一、前期准备提示:下面所有学习内容都是基于以下条件完成的条件1.已经正确安装并正常运行SPO1400CRAFT软件(以下简称LCT)条件2.确认已正确使用爱立信SPO1400CRAFT软件通过网络登录设备(以下简称NE)具体登录教程参考:使用爱立信SPO1400CRAFT软件通过网络登录设备的详细......