Skip to content

Commit 74165b9

Browse files
committed
commit inicial
0 parents  commit 74165b9

File tree

191 files changed

+9081
-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.

191 files changed

+9081
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# name: Generate Notebook (PDF) + README.md
2+
#
3+
# on:
4+
# push:
5+
# branches:
6+
# - main
7+
# paths:
8+
# - 'algorithms/**'
9+
# - 'theoretical/**'
10+
# pull_request:
11+
# branches:
12+
# - main
13+
# paths:
14+
# - 'algorithms/**'
15+
# - 'theoretical/**'
16+
#
17+
# jobs:
18+
# notebook:
19+
# runs-on: ubuntu-latest
20+
#
21+
# steps:
22+
# - name: Checkout code
23+
# uses: actions/checkout@v3
24+
#
25+
# - name: Create Notebook
26+
# uses: addnab/docker-run-action@v3
27+
# with:
28+
# image: mateusvrs/cp-notebook:v1.0
29+
# options: -w /usr/src/app -v ${{ github.workspace }}:/usr/src/app
30+
# run: make team_name="PrisioneirasWA e WAstros"
31+
#
32+
# - name: Format Files (Clang) - Auto Commit
33+
# uses: stefanzweifel/git-auto-commit-action@v5
34+
# with:
35+
# file_pattern: '*.cpp'
36+
#
37+
# commit_message: "clang(format): cpp files correct indentation"
38+
#
39+
# - name: Notebook Update - Auto Commit
40+
# uses: stefanzweifel/git-auto-commit-action@v5
41+
# with:
42+
# file_pattern: 'notebook.pdf'
43+
#
44+
# commit_message: "notebook(pdf): update to latest version"
45+
#
46+
# - name: README Update - Auto Commit
47+
# uses: stefanzweifel/git-auto-commit-action@v5
48+
# with:
49+
# file_pattern: 'README.md'
50+
#
51+
# commit_message: "docs(readme): update to match with notebook"

.vscode/settings.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"files.associations": {
3+
"iomanip": "cpp",
4+
"iostream": "cpp",
5+
"ostream": "cpp"
6+
}
7+
}

C++/Algoritmos/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Algoritmos

C++/Algoritmos/cdq.cpp

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
// LIS 3D problem
2+
3+
struct Segtree{
4+
vi t;
5+
int n;
6+
7+
Segtree(int n){
8+
this->n = n;
9+
t.assign(2*n, 0);
10+
}
11+
12+
int merge(int a, int b){
13+
return max(a, b);
14+
}
15+
16+
void build(){
17+
for(int i=n-1;i>0;i--)
18+
t[i] = merge(t[i<<1], t[i<<1|1]);
19+
}
20+
21+
int query(int l, int r){
22+
int resl = -INF, resr = -INF;
23+
for(l+=n, r+=n+1; l<r; l>>=1, r>>=1){
24+
if(l&1) resl = merge(resl, t[l++]);
25+
if(r&1) resr = merge(t[--r], resr);
26+
}
27+
return merge(resl, resr);
28+
}
29+
30+
void update(int p, int value){
31+
p+=n;
32+
for(t[p]=max(t[p], value); p >>= 1;)
33+
t[p] = merge(t[p<<1], t[p<<1|1]);
34+
}
35+
};
36+
37+
struct point{
38+
int x, y, z, id;
39+
bool left;
40+
point(int x=0, int y=0, int z=0): x(x), y(y), z(z){
41+
left = false;
42+
}
43+
bool operator<(point &o){
44+
if(x != o.x) return x < o.x;
45+
if(y != o.y) return y > o.y;
46+
return z < o.z;
47+
}
48+
};
49+
50+
51+
void cdq(int l, int r, vector<point> &a, vi &dp){
52+
if(l==r) return;
53+
54+
int mid = (l+r) / 2;
55+
56+
cdq(l, mid, a, dp);
57+
58+
// compress z
59+
set<int> uz; map<int, int> idz;
60+
for(int i=l;i<=r;i++) uz.insert(a[i].z);
61+
int id = 0;
62+
for(auto z: uz) idz[z] = id++;
63+
64+
vector<point> tmp;
65+
for(int i=l;i<=r;i++){
66+
tmp.pb(a[i]);
67+
tmp.back().x = 0;
68+
tmp.back().z = idz[tmp.back().z];
69+
if(i<=mid)
70+
tmp.back().left = true;
71+
}
72+
73+
Segtree st(id);
74+
75+
sort(tmp.rbegin(), tmp.rend());
76+
77+
for(auto t: tmp){
78+
if(t.left){
79+
st.update(t.z, dp[t.id]);
80+
}else{
81+
dp[t.id] = max(dp[t.id], st.query(0, t.z-1)+1);
82+
}
83+
}
84+
85+
cdq(mid+1, r, a, dp);
86+
}
87+
88+
89+
int32_t main()
90+
{sws;
91+
92+
int n; cin >> n;
93+
94+
vector<point> vet(n);
95+
for(int i=0;i<n;i++){
96+
cin >> vet[i].x >> vet[i].y >> vet[i].z;
97+
}
98+
99+
sort(vet.begin(), vet.end());
100+
101+
for(int i=0;i<n;i++)
102+
vet[i].id = i;
103+
104+
vi dp(n, 1);
105+
106+
cdq(0, n-1, vet, dp);
107+
108+
int ans = 0;
109+
for(int i=0;i<n;i++)
110+
ans = max(ans, dp[i]);
111+
112+
cout << ans << endl;
113+
114+
115+
return 0;
116+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
ll bestRectangle(vector<int> hist){
2+
int n = hist.size();
3+
stack<ll> s;
4+
s.push(-1);
5+
ll ans = hist[0];
6+
vector<ll> left_smaller(n, -1), right_smaller(n, n);
7+
for(int i=0;i<n;i++){
8+
while(!s.empty() and s.top()!=-1 and hist[s.top()]>hist[i]){
9+
right_smaller[s.top()] = i;
10+
s.pop();
11+
}
12+
if(i>0 and hist[i]==hist[i-1])
13+
left_smaller[i] = left_smaller[i-1];
14+
else
15+
left_smaller[i] = s.top();
16+
s.push(i);
17+
}
18+
19+
for(int j=0;j<n;j++){
20+
ll area = hist[j]*(right_smaller[j]-left_smaller[j]-1);
21+
ans = max(ans, area);
22+
}
23+
return ans;
24+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Subsequence with the biggest sum%m value O(2^(n/2)*n)
2+
3+
int n, m, a[40];
4+
5+
void comb(int l, int r, vi &v){
6+
int sz = r-l+1;
7+
for(int i=0;i<(1<<sz);i++){
8+
int sum = 0;
9+
for(int j=0;j<sz;j++)
10+
if(i & (1<<j))
11+
sum = (sum + a[l+j])%m;
12+
v.pb(sum);
13+
}
14+
15+
sort(v.begin(), v.end());
16+
}
17+
18+
int merge(vi &x, vi &y){
19+
int k=y.size()-1, ans=0;
20+
for(auto v: x){
21+
while(k>0 and v+y[k]>=m)
22+
k--;
23+
ans = max(ans, v+y[k]);
24+
}
25+
return ans;
26+
}
27+
28+
29+
int main()
30+
{sws;
31+
32+
vi x, y;
33+
cin >> n >> m;
34+
35+
for(int i=0;i<n;i++)
36+
cin >> a[i];
37+
38+
comb(0, n/2, x);
39+
comb(n/2 + 1, n-1, y);
40+
cout << merge(x, y) << endl;
41+
42+
return 0;
43+
}

0 commit comments

Comments
 (0)