亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? intervals.h

?? Full support for extended regular expressions (those with intersection and complement); Support for
?? H
字號:

// set-theoretic operations on intervals:
// {(1, 10)} & ~{(4, 5), (7, 7), (10, 15)} = {(1, 3), (6, 6), (8, 9)}

// supports any integral type with known numeric_limits.

#ifndef __DOLPHIN__INTERVALS_H

#define __DOLPHIN__INTERVALS_H

#include <iostream>
#include <set>

#if defined(__GNUC__) && __GNUC__ < 3
	#include "dummy_limits.h"
#else
	#include <limits>
#endif

//#define __DOLPHIN__INTERVALS_H__DEBUG

#ifdef __DOLPHIN__INTERVALS_H__DEBUG
template<class T1, class T2> std::ostream &operator <<(std::ostream &os, const std::pair<T1, T2> &p)
{
	return os << "(" << p.first << ", " << p.second << ")";
}
#endif

template<class T> struct UnionOfIntervals
{
	std::set<std::pair<T, T> > intervals;
	
	UnionOfIntervals()
	{
	}
	UnionOfIntervals(T i)
	{
		insert(i, i);
	}
	UnionOfIntervals(T i, T j)
	{
		insert(i, j);
	}
	operator std::set<T>()
	{
		std::set<T> result;
		
		for(std::set<std::pair<T, T> >::const_iterator p=intervals.begin(); p!=intervals.end(); p++)

			for(T i=p->first; i<=p->second; i++)
				result.insert(result.end(), i);
		
		return result;
	}
	void insert(T i, T j)
	{
		intervals.insert(std::make_pair(i, j));
	}
	void insert(std::pair<T, T> p)
	{
		intervals.insert(p);
	}
	void add_to_end(T i, T j)
	{
		intervals.insert(intervals.end(), std::make_pair(i, j));
	}
	void add_to_end(std::pair<T, T> p)
	{
		intervals.insert(intervals.end(), p);
	}
	bool contains(T x)
	{
		// optimize me!
		
		for(std::set<std::pair<T, T> >::const_iterator p=intervals.begin(); p!=intervals.end(); p++)
			if(p->first<=x && x<=p->second)
				return true;
		
		return false;
	}
	int count(T x)
	{
		return contains(x) ? 1 : 0;
	}
	bool empty() const
	{
		return intervals.size()==0;
	}
	bool check_consistency() const
	{
		// It there are no errors in this file, this function should
		// return true under any circumstances.
		
		if(intervals.size()==0) return true;
		
		std::set<std::pair<T, T> >::const_iterator p=intervals.begin();
		if(p->first > p->second) return false;
		
		T x=p->second;
		
		while(++p != intervals.end())
		{
			if(p->first <= x) return false;
			if(p->first > p->second) return false;
			x=p->second;
		}
		
		return true;
	}
};

template<class T> std::ostream &operator <<(std::ostream &os, const UnionOfIntervals<T> &ui)
{
	os << "{";
	
	bool flag=false;
	for(std::set<std::pair<T, T> >::const_iterator p=ui.intervals.begin(); p!=ui.intervals.end(); p++)
	{
		if(flag)
			os << ", ";
		else
			flag=true;
		
		if(p->first==p->second)
			os << p->first;
		else
			os << "(" << p->first << ", " << p->second << ")";
	}
	
	os << "}";
	
	return os;
}

// should optimize operators ~ and | by replacing result.insert(x) by
// result.insert(write_p, x).

template<class T> UnionOfIntervals<T> operator ~(const UnionOfIntervals<T> &ui)
{
	if(ui.intervals.size()==0)
		return UnionOfIntervals<T>(std::numeric_limits<T>::min(), std::numeric_limits<T>::max());
	
	std::set<std::pair<T, T> >::const_iterator p=ui.intervals.begin();
	T x=std::numeric_limits<T>::min();
	UnionOfIntervals<T> result;

	T max_value;
	while(p!=ui.intervals.end())
	{
		if(x!=p->first)
			result.add_to_end(x, T(p->first-1));

		max_value=p->second;
		x=T(p->second+1);
		p++;
	}

	if(max_value!=std::numeric_limits<T>::max())
		result.add_to_end(x, std::numeric_limits<T>::max());

	return result;
}

template<class T> UnionOfIntervals<T> operator |(const UnionOfIntervals<T> &ui1, const UnionOfIntervals<T> &ui2)
{
#ifdef __DOLPHIN__INTERVALS_H__DEBUG
	std::cout << "UnionOfIntervals operator |:\n";
#endif
	
	if(ui1.intervals.size()==0) return ui2;
	if(ui2.intervals.size()==0) return ui1;
	
	std::set<std::pair<T, T> >::const_iterator p1=ui1.intervals.begin(),
		p2=ui2.intervals.begin();
	T x=min(p1->first, p2->first);
	UnionOfIntervals<T> result;
	
	while(p1!=ui1.intervals.end() && p2!=ui2.intervals.end())
	{
	#ifdef __DOLPHIN__INTERVALS_H__DEBUG
		std::cout << "\t" << *p1 << "; " << *p2 << "; x=" << x << "\n";
	#endif
		
		// if there is a gap between *p1 and *p2, then close the
		// current interval.
		
		if(p1->first<p2->first && p1->second<p2->first && p1->second+1<p2->first)
		{
		#ifdef __DOLPHIN__INTERVALS_H__DEBUG
			std::cout << "\tclose: making " << std::make_pair(x, p1->second) << ", advance p1, ";
		#endif
			result.add_to_end(x, p1->second);
			p1++;
			
			if(p1!=ui1.intervals.end())
				x=min(p1->first, p2->first);
			else
				x=p2->first;
			
		#ifdef __DOLPHIN__INTERVALS_H__DEBUG
			std::cout << "x=" << x << "\n";
		#endif
		}
		else if(p2->first<p1->first && p2->second<p1->first && p2->second+1<p1->first)
		{
		#ifdef __DOLPHIN__INTERVALS_H__DEBUG
			std::cout << "\tclose: making " << std::make_pair(x, p2->second) << ", advance p2, ";
		#endif
			result.add_to_end(x, p2->second);
			p2++;
			
			if(p2!=ui2.intervals.end())
				x=min(p1->first, p2->first);
			else
				x=p1->first;
			
		#ifdef __DOLPHIN__INTERVALS_H__DEBUG
			std::cout << "x=" << x << "\n";
		#endif
		}
		else
		{
			// if it isn't the case, then advance the interval
			// which has smaller higher (_not_ lower) bound.
			
			if(p1->second<p2->second)
			{
			#ifdef __DOLPHIN__INTERVALS_H__DEBUG
				std::cout << "\tadvance p1\n";
			#endif
				p1++;
			}
			else
			{
			#ifdef __DOLPHIN__INTERVALS_H__DEBUG
				std::cout << "\tadvance p2\n";
			#endif
				p2++;
			}
		}
	}
	
	// if there is an interval left, then close it.
	if(p1!=ui1.intervals.end())
	{
	#ifdef __DOLPHIN__INTERVALS_H__DEBUG
		std::cout << "\tfinalize: making " << std::make_pair(x, p1->second) << "\n";
	#endif
		result.add_to_end(x, p1->second);
		p1++;
		
		// if there are more intervals left, just copy them.
		while(p1!=ui1.intervals.end())
			result.add_to_end(*p1++);
	}
	else if(p2!=ui2.intervals.end())
	{
	#ifdef __DOLPHIN__INTERVALS_H__DEBUG
		std::cout << "\tfinalize: making " << std::make_pair(x, p2->second) << "\n";
	#endif
		result.add_to_end(x, p2->second);
		p2++;
		
		while(p2!=ui2.intervals.end())
			result.add_to_end(*p2++);
	}
	
	return result;
}

template<class T> UnionOfIntervals<T> operator &(const UnionOfIntervals<T> &ui1, const UnionOfIntervals<T> &ui2)
{
	// first check some simple sufficient conditions of empty intersection:
	if(ui1.empty() || ui2.empty())
		return UnionOfIntervals<T>();
//	if(ui1.intervals.back().second < ui2.intervals.front().first)
//		return UnionOfIntervals<T>();
//	if(ui2.intervals.back().second < ui1.intervals.front().first)
//		return UnionOfIntervals<T>();
	
	return ~((~ui1) | (~ui2));
}

template<class T> bool operator ==(const UnionOfIntervals<T> &ui1, const UnionOfIntervals<T> &ui2)
{
	return ui1.intervals == ui2.intervals;
}

template<class T> bool operator <(const UnionOfIntervals<T> &ui1, const UnionOfIntervals<T> &ui2)
{
	return ui1.intervals < ui2.intervals;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一卡在线观看| 欧美亚洲综合在线| 美女视频网站久久| 三级欧美在线一区| 亚洲小少妇裸体bbw| 久久久久97国产精华液好用吗| 亚洲欧美日韩成人高清在线一区| 精品国产麻豆免费人成网站| 欧美一级理论片| 日韩一区二区三区视频在线| 欧美一级高清片| 欧美一区二区高清| 日韩欧美国产综合| 久久综合色一综合色88| 久久亚洲一级片| 国产色91在线| **欧美大码日韩| 亚洲午夜视频在线观看| 日韩av成人高清| 麻豆久久一区二区| 国产宾馆实践打屁股91| 99久久久无码国产精品| 欧美xxxxxxxxx| 久久先锋影音av鲁色资源| 国产精品美女久久久久aⅴ | 一区二区三区四区蜜桃| 亚洲成av人片观看| 黄色日韩三级电影| 99视频精品全部免费在线| 欧美午夜精品久久久久久超碰 | 91麻豆精品国产综合久久久久久 | 高清视频一区二区| 色婷婷综合中文久久一本| 欧美精品国产精品| 国产农村妇女毛片精品久久麻豆| 综合在线观看色| 欧美a级理论片| 成人国产视频在线观看| 欧美日韩免费一区二区三区视频| 久久亚洲二区三区| 亚洲一级在线观看| 国产盗摄女厕一区二区三区| 欧美在线观看视频一区二区三区| 日韩欧美成人激情| 亚洲二区在线观看| 丁香婷婷综合五月| 日韩欧美高清在线| 九九久久精品视频| 欧美伊人精品成人久久综合97| 精品久久久久久久久久久久久久久 | 国产精品成人网| 免费不卡在线观看| 欧美性欧美巨大黑白大战| 国产日韩三级在线| 黄色资源网久久资源365| 欧美日韩一区二区三区在线看| 国产日韩欧美精品综合| 日韩av电影免费观看高清完整版在线观看 | 亚洲成a人片综合在线| 不卡电影一区二区三区| 久久久久久久久久久黄色| 亚洲成年人网站在线观看| 99精品视频中文字幕| 久久久久久久免费视频了| 日本午夜精品一区二区三区电影| 色哟哟在线观看一区二区三区| 国产日韩视频一区二区三区| 麻豆91精品91久久久的内涵| 欧美美女直播网站| 亚洲国产精品麻豆| 欧美在线一区二区| 亚洲精品一二三| 91麻豆国产福利精品| 日韩理论电影院| 色综合天天天天做夜夜夜夜做| 国产无一区二区| 国产不卡一区视频| 国产精品国产馆在线真实露脸| 国产成a人无v码亚洲福利| 久久久久久亚洲综合影院红桃| 韩日精品视频一区| 国产欧美日韩一区二区三区在线观看| 国产一区二区三区电影在线观看| 精品国偷自产国产一区| 韩国三级电影一区二区| 久久精品亚洲国产奇米99| 国产福利精品导航| 中文字幕在线观看一区二区| 成人午夜视频免费看| 中文在线一区二区| 99精品在线免费| 亚洲一区二区三区中文字幕| 欧洲av一区二区嗯嗯嗯啊| 午夜国产精品影院在线观看| 欧美一区二区三区视频在线| 国内久久精品视频| 国产精品理论在线观看| 在线观看免费亚洲| 丝袜亚洲精品中文字幕一区| 欧美www视频| 不卡的av电影| 天天av天天翘天天综合网 | 国产美女一区二区| 国产精品女主播av| 欧美另类久久久品| 国产精品一区二区在线观看不卡 | 一本一道波多野结衣一区二区| 亚洲尤物视频在线| 精品国产91洋老外米糕| 91香蕉视频在线| 麻豆国产欧美一区二区三区| 国产精品无码永久免费888| 欧美日韩日本视频| 成人午夜免费视频| 秋霞影院一区二区| 亚洲视频网在线直播| 欧美一二三区在线| 99国产精品久久久久久久久久 | 欧美va亚洲va| 色欧美片视频在线观看| 国产专区综合网| 亚洲一区二区欧美日韩| 久久久www成人免费无遮挡大片| 91官网在线免费观看| 国产jizzjizz一区二区| 视频一区视频二区中文字幕| 中文字幕亚洲视频| 日韩欧美国产一二三区| 在线免费观看日本一区| 国产91精品一区二区麻豆网站| 亚洲成人动漫一区| 国产精品国产三级国产普通话三级| 欧美一区二区精美| 在线视频中文字幕一区二区| 成人动漫在线一区| 国产精品一区二区免费不卡 | 欧美电视剧免费观看| 欧洲一区在线电影| 91在线精品一区二区三区| 国产一区二区网址| 久久精品国产**网站演员| 五月婷婷另类国产| 亚洲午夜电影在线观看| 亚洲视频在线观看三级| 中文字幕一区二区三区蜜月 | 自拍偷拍亚洲综合| 欧美国产一区视频在线观看| 日韩美一区二区三区| 91麻豆精品国产| 欧美日韩国产免费一区二区 | 日韩亚洲欧美高清| 欧美精品18+| 欧美一区二区三区视频在线| 欧美男男青年gay1069videost| 欧美亚洲一区二区三区四区| 91麻豆.com| 欧洲国内综合视频| 欧美剧情电影在线观看完整版免费励志电影 | 丝袜a∨在线一区二区三区不卡| 一区二区成人在线视频| 亚洲国产精品影院| 首页亚洲欧美制服丝腿| 老司机精品视频在线| 久久99精品久久只有精品| 国产综合色在线视频区| 国产成人免费视| 99久久免费国产| 欧美午夜精品久久久| 欧美少妇性性性| 日韩欧美久久一区| 久久久91精品国产一区二区精品| 国产精品美女一区二区在线观看| 中文字幕一区三区| 亚洲成人综合视频| 久久精品国产网站| 成人精品gif动图一区| 色婷婷综合久久| 日韩女优毛片在线| 国产精品污网站| 午夜视频一区在线观看| 韩国成人精品a∨在线观看| www.久久精品| 欧美日韩国产乱码电影| 久久久久国色av免费看影院| 亚洲色图制服诱惑| 久久精品免费看| 色哟哟在线观看一区二区三区| 在线不卡一区二区| 国产精品免费看片| 日韩精品国产精品| a级精品国产片在线观看| 欧美理论片在线| 国产精品久久久久久久午夜片| 日韩福利电影在线| 成人激情动漫在线观看| 91精品福利在线一区二区三区| 欧美高清在线视频| 青青草原综合久久大伊人精品优势 | 欧美色图在线观看| 国产欧美1区2区3区|