Skip to content

Commit 3c239e5

Browse files
chore: update minified library versions
1 parent c3a3b89 commit 3c239e5

File tree

195 files changed

+21630
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

195 files changed

+21630
-0
lines changed
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
#line 1 "cp-algo/min-bundled/cp-algo/geometry/closest_pair.hpp"
2+
#line 1 "cp-algo/geometry/closest_pair.hpp"
3+
#line 1 "cp-algo/random/rng.hpp"
4+
#include <chrono>
5+
#include <random>
6+
namespace cp_algo::random{std::mt19937_64 gen(
7+
std::chrono::steady_clock::now().time_since_epoch().count()
8+
);
9+
uint64_t rng(){return gen();}}
10+
#line 1 "cp-algo/geometry/point.hpp"
11+
#line 1 "cp-algo/util/complex.hpp"
12+
#include <iostream>
13+
#include <cmath>
14+
namespace cp_algo{template<typename T>
15+
struct complex{using value_type=T;
16+
T x,y;
17+
constexpr complex():x(),y(){}
18+
constexpr complex(T x):x(x),y(){}
19+
constexpr complex(T x,T y):x(x),y(y){}
20+
complex&operator*=(T t){x*=t;y*=t;return*this;}
21+
complex&operator/=(T t){x/=t;y/=t;return*this;}
22+
complex operator*(T t)const{return complex(*this)*=t;}
23+
complex operator/(T t)const{return complex(*this)/=t;}
24+
complex&operator+=(complex t){x+=t.x;y+=t.y;return*this;}
25+
complex&operator-=(complex t){x-=t.x;y-=t.y;return*this;}
26+
complex operator*(complex t)const{return{x*t.x-y*t.y,x*t.y+y*t.x};}
27+
complex operator/(complex t)const{return*this*t.conj()/t.norm();}
28+
complex operator+(complex t)const{return complex(*this)+=t;}
29+
complex operator-(complex t)const{return complex(*this)-=t;}
30+
complex&operator*=(complex t){return*this=*this*t;}
31+
complex&operator/=(complex t){return*this=*this/t;}
32+
complex operator-()const{return{-x,-y};}
33+
complex conj()const{return{x,-y};}
34+
T norm()const{return x*x+y*y;}
35+
T abs()const{return std::sqrt(norm());}
36+
T const real()const{return x;}
37+
T const imag()const{return y;}
38+
T&real(){return x;}
39+
T&imag(){return y;}
40+
static constexpr complex polar(T r,T theta){return{T(r*cos(theta)),T(r*sin(theta))};}
41+
auto operator<=>(complex const&t)const=default;};
42+
template<typename T>
43+
complex<T>operator*(auto x,complex<T>y){return y*=x;}
44+
template<typename T>complex<T>conj(complex<T>x){return x.conj();}
45+
template<typename T>T norm(complex<T>x){return x.norm();}
46+
template<typename T>T abs(complex<T>x){return x.abs();}
47+
template<typename T>T&real(complex<T>&x){return x.real();}
48+
template<typename T>T&imag(complex<T>&x){return x.imag();}
49+
template<typename T>T const real(complex<T>const&x){return x.real();}
50+
template<typename T>T const imag(complex<T>const&x){return x.imag();}
51+
template<typename T>
52+
constexpr complex<T>polar(T r,T theta){return complex<T>::polar(r,theta);}
53+
template<typename T>
54+
std::ostream&operator<<(std::ostream&out,complex<T>x){return out<<x.real()<<' '<<x.imag();}}
55+
#line 5 "cp-algo/geometry/point.hpp"
56+
namespace cp_algo::geometry{template<typename ftype>
57+
struct point_t:complex<ftype>{using Base=complex<ftype>;
58+
using Base::Base;
59+
point_t(Base const&t):Base(t){}
60+
auto operator<=>(point_t const&t)const{return std::pair{y(),-x()}<=>std::pair{t.y(),-t.x()};}
61+
ftype x()const{return Base::real();}
62+
ftype y()const{return Base::imag();}
63+
point_t cmul(point_t const&t)const{return conj(*this)*t;}
64+
ftype dot(point_t const&t)const{return cmul(t).x();}
65+
ftype cross(point_t const&t)const{return cmul(t).y();}
66+
static constexpr point_t O={0,0};
67+
int half()const{return*this<O?-1:*this==O?0:1;}
68+
static bool ccw(point_t const&a,point_t const&b){return a.cross(b)>0;}
69+
static bool ccw_abs(point_t const&a,point_t const&b){return std::tuple{a.half(),(ftype)0,norm(a)}<
70+
std::tuple{b.half(),a.cross(b),norm(b)};}
71+
void read(){ftype _x,_y;
72+
std::cin>>_x>>_y;
73+
*this={_x,_y};}
74+
void print()const{std::cout<<x()<<' '<<y()<<"\n";}};}
75+
#line 5 "cp-algo/geometry/closest_pair.hpp"
76+
#include <vector>
77+
#include <map>
78+
namespace cp_algo::geometry{template<typename ftype>
79+
auto closest_pair(std::vector<point_t<ftype>>const&r){using point=point_t<ftype>;
80+
size_t n=size(r);
81+
int64_t md=1e18;
82+
for(size_t i=0;i<n/100;i++){auto A=random::rng()%n;
83+
auto B=random::rng()%n;
84+
if(A!=B){md=std::min(md,norm(r[A]-r[B]));
85+
if(md==0){return std::pair{A,B};}}}
86+
std::map<point,std::vector<size_t>>neigs;
87+
md=(int64_t)ceil(sqrt((double)md));
88+
for(size_t i=0;i<n;i++){neigs[r[i]/md].push_back(i);}
89+
size_t a=0,b=1;
90+
md=norm(r[a]-r[b]);
91+
for(auto&[p,id]:neigs){for(int dx:{-1,0,1}){for(int dy:{-1,0,1}){auto pp=p+point{dx,dy};
92+
if(!neigs.count(pp)){continue;}
93+
for(size_t i:neigs[pp]){for(size_t j:id){if(j==i){break;}
94+
int64_t cur=norm(r[i]-r[j]);
95+
if(cur<md){md=cur;
96+
a=i;
97+
b=j;}}}}}}
98+
return std::pair{a,b};}}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
#line 1 "cp-algo/min-bundled/cp-algo/geometry/convex_hull.hpp"
2+
#line 1 "cp-algo/geometry/convex_hull.hpp"
3+
#line 1 "cp-algo/geometry/point.hpp"
4+
#line 1 "cp-algo/util/complex.hpp"
5+
#include <iostream>
6+
#include <cmath>
7+
namespace cp_algo{template<typename T>
8+
struct complex{using value_type=T;
9+
T x,y;
10+
constexpr complex():x(),y(){}
11+
constexpr complex(T x):x(x),y(){}
12+
constexpr complex(T x,T y):x(x),y(y){}
13+
complex&operator*=(T t){x*=t;y*=t;return*this;}
14+
complex&operator/=(T t){x/=t;y/=t;return*this;}
15+
complex operator*(T t)const{return complex(*this)*=t;}
16+
complex operator/(T t)const{return complex(*this)/=t;}
17+
complex&operator+=(complex t){x+=t.x;y+=t.y;return*this;}
18+
complex&operator-=(complex t){x-=t.x;y-=t.y;return*this;}
19+
complex operator*(complex t)const{return{x*t.x-y*t.y,x*t.y+y*t.x};}
20+
complex operator/(complex t)const{return*this*t.conj()/t.norm();}
21+
complex operator+(complex t)const{return complex(*this)+=t;}
22+
complex operator-(complex t)const{return complex(*this)-=t;}
23+
complex&operator*=(complex t){return*this=*this*t;}
24+
complex&operator/=(complex t){return*this=*this/t;}
25+
complex operator-()const{return{-x,-y};}
26+
complex conj()const{return{x,-y};}
27+
T norm()const{return x*x+y*y;}
28+
T abs()const{return std::sqrt(norm());}
29+
T const real()const{return x;}
30+
T const imag()const{return y;}
31+
T&real(){return x;}
32+
T&imag(){return y;}
33+
static constexpr complex polar(T r,T theta){return{T(r*cos(theta)),T(r*sin(theta))};}
34+
auto operator<=>(complex const&t)const=default;};
35+
template<typename T>
36+
complex<T>operator*(auto x,complex<T>y){return y*=x;}
37+
template<typename T>complex<T>conj(complex<T>x){return x.conj();}
38+
template<typename T>T norm(complex<T>x){return x.norm();}
39+
template<typename T>T abs(complex<T>x){return x.abs();}
40+
template<typename T>T&real(complex<T>&x){return x.real();}
41+
template<typename T>T&imag(complex<T>&x){return x.imag();}
42+
template<typename T>T const real(complex<T>const&x){return x.real();}
43+
template<typename T>T const imag(complex<T>const&x){return x.imag();}
44+
template<typename T>
45+
constexpr complex<T>polar(T r,T theta){return complex<T>::polar(r,theta);}
46+
template<typename T>
47+
std::ostream&operator<<(std::ostream&out,complex<T>x){return out<<x.real()<<' '<<x.imag();}}
48+
#line 5 "cp-algo/geometry/point.hpp"
49+
namespace cp_algo::geometry{template<typename ftype>
50+
struct point_t:complex<ftype>{using Base=complex<ftype>;
51+
using Base::Base;
52+
point_t(Base const&t):Base(t){}
53+
auto operator<=>(point_t const&t)const{return std::pair{y(),-x()}<=>std::pair{t.y(),-t.x()};}
54+
ftype x()const{return Base::real();}
55+
ftype y()const{return Base::imag();}
56+
point_t cmul(point_t const&t)const{return conj(*this)*t;}
57+
ftype dot(point_t const&t)const{return cmul(t).x();}
58+
ftype cross(point_t const&t)const{return cmul(t).y();}
59+
static constexpr point_t O={0,0};
60+
int half()const{return*this<O?-1:*this==O?0:1;}
61+
static bool ccw(point_t const&a,point_t const&b){return a.cross(b)>0;}
62+
static bool ccw_abs(point_t const&a,point_t const&b){return std::tuple{a.half(),(ftype)0,norm(a)}<
63+
std::tuple{b.half(),a.cross(b),norm(b)};}
64+
void read(){ftype _x,_y;
65+
std::cin>>_x>>_y;
66+
*this={_x,_y};}
67+
void print()const{std::cout<<x()<<' '<<y()<<"\n";}};}
68+
#line 4 "cp-algo/geometry/convex_hull.hpp"
69+
#include <algorithm>
70+
#include <utility>
71+
#include <vector>
72+
#include <ranges>
73+
namespace cp_algo::geometry{template<typename ftype>
74+
std::vector<point_t<ftype>>convex_hull(std::vector<point_t<ftype>>r){using point=point_t<ftype>;
75+
std::ranges::sort(r);
76+
if(size(r)<=1||r[0]==r.back()){return empty(r)?r:std::vector{r[0]};}
77+
std::vector<point>hull={r[0]};
78+
for(int half:{0,1}){size_t base=size(hull);
79+
for(auto it:std::views::drop(r,1)){while(size(hull)>=base+1){point a=hull.back();
80+
if(point::ccw(it-a,end(hull)[-2]-a)){break;}else{hull.pop_back();}}
81+
hull.push_back(it);}
82+
std::ranges::reverse(r);
83+
std::ignore=half;}
84+
hull.pop_back();
85+
return hull;}}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#line 1 "cp-algo/min-bundled/cp-algo/geometry/point.hpp"
2+
#line 1 "cp-algo/geometry/point.hpp"
3+
#line 1 "cp-algo/util/complex.hpp"
4+
#include <iostream>
5+
#include <cmath>
6+
namespace cp_algo{template<typename T>
7+
struct complex{using value_type=T;
8+
T x,y;
9+
constexpr complex():x(),y(){}
10+
constexpr complex(T x):x(x),y(){}
11+
constexpr complex(T x,T y):x(x),y(y){}
12+
complex&operator*=(T t){x*=t;y*=t;return*this;}
13+
complex&operator/=(T t){x/=t;y/=t;return*this;}
14+
complex operator*(T t)const{return complex(*this)*=t;}
15+
complex operator/(T t)const{return complex(*this)/=t;}
16+
complex&operator+=(complex t){x+=t.x;y+=t.y;return*this;}
17+
complex&operator-=(complex t){x-=t.x;y-=t.y;return*this;}
18+
complex operator*(complex t)const{return{x*t.x-y*t.y,x*t.y+y*t.x};}
19+
complex operator/(complex t)const{return*this*t.conj()/t.norm();}
20+
complex operator+(complex t)const{return complex(*this)+=t;}
21+
complex operator-(complex t)const{return complex(*this)-=t;}
22+
complex&operator*=(complex t){return*this=*this*t;}
23+
complex&operator/=(complex t){return*this=*this/t;}
24+
complex operator-()const{return{-x,-y};}
25+
complex conj()const{return{x,-y};}
26+
T norm()const{return x*x+y*y;}
27+
T abs()const{return std::sqrt(norm());}
28+
T const real()const{return x;}
29+
T const imag()const{return y;}
30+
T&real(){return x;}
31+
T&imag(){return y;}
32+
static constexpr complex polar(T r,T theta){return{T(r*cos(theta)),T(r*sin(theta))};}
33+
auto operator<=>(complex const&t)const=default;};
34+
template<typename T>
35+
complex<T>operator*(auto x,complex<T>y){return y*=x;}
36+
template<typename T>complex<T>conj(complex<T>x){return x.conj();}
37+
template<typename T>T norm(complex<T>x){return x.norm();}
38+
template<typename T>T abs(complex<T>x){return x.abs();}
39+
template<typename T>T&real(complex<T>&x){return x.real();}
40+
template<typename T>T&imag(complex<T>&x){return x.imag();}
41+
template<typename T>T const real(complex<T>const&x){return x.real();}
42+
template<typename T>T const imag(complex<T>const&x){return x.imag();}
43+
template<typename T>
44+
constexpr complex<T>polar(T r,T theta){return complex<T>::polar(r,theta);}
45+
template<typename T>
46+
std::ostream&operator<<(std::ostream&out,complex<T>x){return out<<x.real()<<' '<<x.imag();}}
47+
#line 5 "cp-algo/geometry/point.hpp"
48+
namespace cp_algo::geometry{template<typename ftype>
49+
struct point_t:complex<ftype>{using Base=complex<ftype>;
50+
using Base::Base;
51+
point_t(Base const&t):Base(t){}
52+
auto operator<=>(point_t const&t)const{return std::pair{y(),-x()}<=>std::pair{t.y(),-t.x()};}
53+
ftype x()const{return Base::real();}
54+
ftype y()const{return Base::imag();}
55+
point_t cmul(point_t const&t)const{return conj(*this)*t;}
56+
ftype dot(point_t const&t)const{return cmul(t).x();}
57+
ftype cross(point_t const&t)const{return cmul(t).y();}
58+
static constexpr point_t O={0,0};
59+
int half()const{return*this<O?-1:*this==O?0:1;}
60+
static bool ccw(point_t const&a,point_t const&b){return a.cross(b)>0;}
61+
static bool ccw_abs(point_t const&a,point_t const&b){return std::tuple{a.half(),(ftype)0,norm(a)}<
62+
std::tuple{b.half(),a.cross(b),norm(b)};}
63+
void read(){ftype _x,_y;
64+
std::cin>>_x>>_y;
65+
*this={_x,_y};}
66+
void print()const{std::cout<<x()<<' '<<y()<<"\n";}};}

0 commit comments

Comments
 (0)