Cod sursa(job #2329183)

Utilizator cosceexcosceex cosceex Data 26 ianuarie 2019 14:12:29
Problema Asmax Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#include <cstring>
#include <vector>

using namespace std;

ifstream f("blis.in");
ofstream g("blis.out");

const int nmax = 100005;
const int oo = 2e9;
int k, n, i, j, nr, maxim, poz, lft, rgt, m;
char s[nmax];
vector<pair<int, int> > V[nmax];
int vec[nmax];

int cb(int x)
{
    int st = 1, dr = m, mij;
    while (st <= dr)
    {
        mij = (st+dr)/2;
        if (vec[mij] >= x)
            dr = mij-1;
        else st = mij+1;
    }
    return st;
}

int main()
{
    f >> k >> s+1;
    n = strlen(s+1);

    for (i = 1; i <= n; i++)
        vec[i] = oo;
    vec[0] = -oo;

    for (i = 1; i <= n; i++)
    {
        nr = 0;
        for (j = i; j < i+k and j <= n; j++)
        {
            nr = nr*2+s[j]-'0';
            if (maxim < nr)
            {
                maxim = nr;
            }

            poz = cb(nr);
            V[j].push_back(make_pair(poz, nr));
        }
        int N = V[i].size();
        pair<int,int> aux;
        for (j = 0;j<N;j++)
        {
            aux = V[i][j];
            if (vec[aux.first] > aux.second)
            {
                vec[aux.first] = aux.second;
                if (aux.first > m)
                   m++;
            }
        }
    }

    g << maxim << '\n' << m;
    return 0;
}