base.h

来自「生成tin」· C头文件 代码 · 共 90 行

H
90
字号
#ifndef _BASE_H
#define _BASE_H

template <class T>
int _find(const T& t,int l,int r,const vector<T>& v)
{
	if(t < v[l] || t > v[r])
		return -1;
	int i = (l + r) / 2;
	if(t == v[i])
		return i;
	else if(t < v[i])
		return _find(t,l,i-1,v);
	else
		return _find(t,i+1,r,v);
}
template <class T>
int Find(const T& t,const vector<T>& v)
{
	return _find(t,0,v.size()-1,v);
}
template <class T>
void _iore(const T& t,int l,int r,vector<T>& v)
{
	if(t<v[l])
	{
		v.insert(v.begin()+l,t);
		return;
	}
	else if(t>v[r])
	{
		v.insert(v.begin()+r+1,t);
		return;
	}
	int i = (l + r) / 2;
	if(t == v[i])
		v.erase(v.begin()+i);
	else if(t < v[i])
		_iore(t,l,i-1,v);
	else
		_iore(t,i+1,r,v);
}
template <class T>
void InsertOrErase(const T& t,vector<T>& v)
{
	if(v.size() == 0)
	{
		v.push_back(t);
	}
	else 
	{
		_iore(t,0,v.size()-1,v);
	}
}
template <class T>
int _insert(const T& t,int l,int r,vector<T>& v)
{
	if(t<v[l])
	{
		v.insert(v.begin()+l,t);
		return l;
	}
	else if(t>v[r])
	{
		v.insert(v.begin()+r+1,t);
		return r+1;
	}
	int i = (l + r) / 2;
	if(t == v[i])
		return -1;
	else if(t < v[i])
		return _insert(t,l,i-1,v);
	else
		return _insert(t,i+1,r,v);
}
template <class T>
int Insert(const T& t,vector<T>& v)
{
	if(v.size() == 0)
	{
		v.push_back(t);
		return 0;
	}
	else 
	{
		return _insert(t,0,v.size()-1,v);
	}
}
#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?