Pagini recente » Cod sursa (job #3219040) | Cod sursa (job #1276874) | Cod sursa (job #223836) | Istoria paginii utilizator/dornescuvlad | Cod sursa (job #1737745)
#include <algorithm>
#include <fstream>
#include <cstring>
#include <set>
#define se second
#define fi first
#define DIM 100005
using namespace std;
ifstream f ("nextseq.in");
ofstream g ("nextseq.out");
int fn[DIM] , sn[DIM] , unu[DIM] , v[DIM] , qq[DIM];
int n , m , p , x , nr , BASE;
int a[DIM] , b[DIM];
bool comp (int a[] , int b[]) {
if (a[0] != b[0]) {
return 0;
}
for (int i = 1; i <= a[0]; ++i) {
if (a[i] != b[i]) {
return 0;
}
}
return 1;
}
void adun (int a[] , int b[]);
bool verif ();
int caut_bin(int val) {
int i , p = 0;
for (i = 1; i <= n; i <<= 1);
while (i) {
if (i + p <= n && a[i + p] <= val) {
p += i;
}
i >>= 1;
}
return p;
}
int main() {
unu[1] = unu[0] = 1;
f >> n >> m >> p;
for (int i = 1; i <= n; ++i) {
f >> a[i];
b[i] = a[i];
}
sort (a + 1 , a + n + 1);
for (int i = 1; i <= n; ++i) {
v[b[i]] = caut_bin(b[i]);
}
BASE = n + 1;
for (int i = m; i >= 1; --i) {
f >> x;
fn[i] = v[x];
}
fn[0] = m;
for (int i = p; i >= 1; --i) {
f >> x;
sn[i] = v[x];
}
sn[0] = p;
while (1) {
int ok = 0;
for (int i = 1; i <= m && ok == 0; ++i) {
if (fn[i] < n) {
ok = 1;
++fn[i];
}
else {
fn[i] = 1;
}
}
if (!ok) {
++m;
fn[m] = 1;
}
if (m < p || verif()) {
++nr;
}
else {
break;
}
}
g << nr;
return 0;
}
bool verif () {
for (int i = 1; i <= m; ++i) {
if (fn[i] < sn[i]) {
return 1;
}
}
return 0;
}