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

算法模板

时间:2023-10-01 15:22:32浏览次数:39  
标签:... int while 算法 m1 m2 check 模板

算法模板

1.排序

(1)快速排序(No STL)

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,a[100010];

void dfs(int l,int r)
{
	if(l >= r)
		return ;
	int pos = (l + r) >> 1;
	int x = a[pos];
	int i = l,j = r;
	while(i <= j)
	{
		while(a[i] < x)
			i++;
		while(a[j] > x)
			j--;
		if(i <= j)
			swap(a[i],a[j]),i++,j--;
	}
	dfs(l,j);
	dfs(i,r);
}

signed main()
{
	cin >> n;
	for(int i = 1; i <= n; i++)
		cin >> a[i];
	dfs(1,n);
	for(int i = 1; i <= n; i++)
		cout << a[i] << " ";
	cout << "\n";
	return 0;
}

2.二分

(1)整数三分

int l = ...,r = ...,ans = ...;
while(r - l >= 3)
{
	int m1 = l + (r - l) / 3;
	int m2 = r - (r - l) / 3;
	if(f(m1) > f(m2))
		ans = l,l = m1 + 1;
	else
		r = m2 - 1;
}
while(l <= r)
{
	if(f(l) < f(ans))
		ans = l;
	l++;
}

(2)小数三分

double l = ...,r = ...;
while(l + eps < r)
{
	double m1 = (l + l + r) / 3.0;
	double m2 = (l + r + r) / 3.0;
	if(check(m1) < check(m2))
		r = m2;
	else
		l = m1;
}

然后答案是check(l)或者l

(其中的eps根据题目中要求的精度来定)

标签:...,int,while,算法,m1,m2,check,模板
From: https://www.cnblogs.com/cookiebread/p/alg_muban.html

相关文章

  • FFT变换算法
    FFT(FastFourierTransform)算法是一种高效的离散傅里叶变换(DFT)计算方法,它通过分解长度为N的DFT计算成若干个长度为N/2的DFT计算,从而大大减少了运算量。由于其快速、高效、稳定等特点,FFT算法在数字信号处理、图像处理、通信系统等领域得到了广泛应用。常用的FFT变换算法包括蝶形运算......
  • springboot web开发整合Freemarker 模板引擎
    目录Freemarker添加依赖配置文件ymlcontrollerhtmlFreemarker简介:FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组......
  • C/C++学习 -- 流加密算法(RC4算法)
    在信息安全领域,加密算法扮演着至关重要的角色。其中,RC4算法是一种广泛使用的流密码算法,用于数据的保密性和机密性。本文将深入探讨RC4算法的概述、特点、原理,以及提供C语言和C++语言实现RC4算法的代码案例。一、RC4算法概述RC4算法,又称RivestCipher4或Ron'sCode4,是一种流密码(St......
  • java 实现模板方法模式
    模板方法模式(TemplateMethodPattern)是一种行为型设计模式,它定义了一个算法的骨架,将具体的步骤延迟到子类中实现。模板方法模式使得子类可以重新定义算法的某些步骤,而不改变算法的结构。以下是一个简单的Java示例,演示如何实现模板方法模式:首先,定义一个抽象类Game,它包含一个模板方......
  • 雷德算法介绍
    雷德(Radix)算法是一种基于FFT(FastFourierTransform)算法的计算方法,其基本思想是将长度为N的DFT计算分解为O(logN)个长度为2的DFT计算,并通过不断的合并操作得到最终的结果。雷德算法的基本过程如下:将输入序列按二进制反转的顺序重新排列,以得到新的输入序列;将新的输入序列划分为两个......
  • 视频融合/视频汇聚平台加智能ai算法助力农业高质量生产
    我国是农业大国,随着新兴技术如AI的迅猛发展,大数据和互联网等技术已应用于农业生产中的各个环节,以提高土地利用率、降低成本、提高生产效率。智慧农业因此而兴起。智慧农业解决方案是根据农业生产的需求与现代网络发展状况而设计的。它利用人工智能技术,结合农业物联网、移动互联网......
  • 分析视频监控/视频汇聚平台EasyCVR分析网关车辆检测/车牌识别算法及应用场景
    在数字化时代,由于大众对出行要求的提升,汽车数量不断增加,给城市和交通管理带来了很多挑战。为了应对这些问题,旭帆科技开发了一套AI智能车辆检测与车牌识别算法,为交通管理和车辆安全提供高效的解决方案。AI车辆检测和车牌识别算法集成了多种技术,如光学字符识别(OCR)和云计算等,能够从......
  • 基于weka的数据库挖掘➖聚类方法K-Means算法
    基于weka的数据库挖掘➖聚类方法K-Means算法目标1.掌握k-Means算法的原理和聚类过程2.可以使用k-Means算法实现对给定样本集的聚类。内容1.采用k-Means算法,对给出的15个样本数据进行聚类,聚类簇数可自由调整,最后输出簇数为2、3、5的聚类结果。k-Means初识k-Means算法是一种......
  • 模板
    前缀和s[i]=s[i-1]+a[i];s[r]-s[l-1]二维前缀和s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1]s[i][j]-s[i-1][j]-s[i][j-1]+s[i-1][j-1]差分d[l]++,d[r+1]--;二维差分d[x1][y1]++,d[x2+1][y2+1]++;d[x1][y2+1]--,d[x2......
  • Miller-Rabin算法
    原文链接:https://blog.csdn.net/qq_43227036/article/details/100336234OK,前面已经讲了很多判断素数的方法,在判断一个数是否为素数时我们可以采用试除法,但如要求1-n的范围那么时间复杂度很高,所以有了线性的筛法求素数。但如果为了判断一个大数是否为素数却要消耗很大的空间,这显......