Pagini recente » Cod sursa (job #642233) | Cod sursa (job #2738277) | Cod sursa (job #2004395) | Cod sursa (job #1711992) | Cod sursa (job #2191947)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#define NMAX 10005
using namespace std;
ifstream f("interclasare.in");
ofstream g("interclasare.out");
int n, m, r[20005], l1, l2;
vector<int> a, b;
bitset<NMAX> viz1, viz2;
void citire(){
f>>n;
for(int i=1; i<=n; i++){
int x;
f>>x;
a.push_back(x);
}
f>>m;
for(int i=1; i<=m; i++){
int x;
f>>x;
b.push_back(x);
}
}
int cmlsc(vector<int> a, int k){
vector<int> b;
int p, u, m;
b.push_back(0);
r[0] = 0;
p = u = m = 0;
for(int i=1; i<a.size(); i++){
if(a[i] > a[b.back()]){
r[i] = b.back();
b.push_back(i);
}
p = 0;
u = b.size() - 1;
while(p<u){
m = (p + u)/2;
if(a[b[m]] < a[i]) p = m + 1;
else u = m;
}
if(a[i] < a[b[u]]){
b[u] = i;
if(u > 0) r[i] = b[u - 1];
}
}
if(k){
for(u = b.size(), p = b.back(); u--; p = r[p]) viz2[p] = 1;
}else{
for(u = b.size(), p = b.back(); u--; p = r[p]) viz1[p] = 1;
}
return b.size();
}
void interclasare(){
for(int i = 0, j = 0; i<n || j<m;){
if(i>=n || (j<m && viz2[j] == 0) ){
g<<b[j]<<" ";
j++;
}else if( j>=m || (i<n && viz1[i] == 0) ){
g<<a[i]<<" ";
i++;
}else if(a[i] < b[j]){
g<<a[i]<<" ";
i++;
}else{
g<<b[j]<<" ";
j++;
}
}
}
int main()
{
citire();
l1 = cmlsc(a, 0);
l2 = cmlsc(b, 1);
g<<l1 + l2<<"\n";
interclasare();
return 0;
}