Skyline Divisão Conquista em Cpp
Por: Ana Aline • 25/9/2021 • Trabalho acadêmico • 1.391 Palavras (6 Páginas) • 85 Visualizações
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
/*void Merge(vector<int> &vetor, int comeco, int fim, int meio){
int n1 = meio - comeco + 1;
int n2 = fim - meio;
int l[n1], r[n2];
for(int i = 0; i < n1; i++)
l[i] = vetor[comeco + i];
for(int i = 0; i < n2; i++)
r[i] = vetor[meio + i + 1];
//daqui para cima separa os dois vetores
int i = 0, j = 0, k = comeco;
while(i < n1 && j < n2){
if(l[i] <= r[j]){
vetor[k] = l[i];
i++;
}
else{
vetor[k] = r[j];
j++;
}
k++;
}
//sobrou de algum lado para inserir
while(i < n1){
vetor[k] = l[i];
i++;
k++;
}
while(j < n2){
vetor[k] = r[j];
j++;
k++;
}
}
*/
vector<pair<int, int> > SkyMerge(vector<pair<int, int> > &line1, vector<pair<int, int> > &line2){
int n1 = line1.size();
int n2 = line2.size();
vector<pair<int, int> > line;
int i = 0, j = 0, h1 = -1, h2 = -1, H = -1, aux = -1; //ou begin
while(i < n1 && j < n2){
if(line1[i].first < line2[j].first){
h1 = line1[i].second;
if(h1 > h2){
line.push_back(make_pair(line1[i].first,h1));
H = h1;
aux++;
}
else{
line.push_back(make_pair(line1[i].first,h2));
H = h2;
aux++;
}
i++;
}
else{
h2 = line2[j].second;
if(h1 > h2){
line.push_back(make_pair(line2[j].first,h1));
H = h1;
aux++;
}
else{
line.push_back(make_pair(line2[j].first,h2));
H = h2;
aux++;
}
j++;
}
if(aux > 0)
if(line[aux - 1].second == H){
line.pop_back();
aux--;
...