Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <cstring>
- #include <vector>
- using namespace std;
- ifstream f("blis.in");
- ofstream g("blis.out");
- const int nmax = 100005;
- const int oo = 2000000004;
- 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement