Pagini recente » Cod sursa (job #1718495) | Cod sursa (job #285616) | Cod sursa (job #2456263) | Cod sursa (job #334417) | Cod sursa (job #2396084)
#include <fstream>
#include <vector>
#include <cstring>
#define x first
#define y second
using namespace std;
ifstream f("blis.in");
ofstream g("blis.out");
long long k,v2[100001],rasp2,n,rasp,poz,i,j;
char s[100001];
int cautare_binara(int x)
{
int in=1,sf=rasp2,mij;
while(in<=sf)
{
mij=(in+sf)/2;
if(v2[mij]>=x)
{
sf=mij-1;
}
if(v2[mij]<x)
{
in=mij+1;
}
}
return in;
}
vector<pair<int,int> >v[100001];
int main()
{
f>>k;
f.get();
f.getline(s+1,100001);
n=strlen(s+1);
rasp=-1;
for(i=1; i<=n; i++)
{
v2[i]=1000000000000000;
}
v2[0]=-1000000000000000;
for(i=1; i<=n; i++)
{
int nr=0;
for(j=i;(j-i<k) && j<=n;j++)
{
nr=nr*2+s[j]-'0';
if(nr>rasp)
{
rasp=nr;
}
poz=cautare_binara(nr);
v[j].push_back({poz,nr});
}
for(j=0;j<v[i].size();j++)
{
if(v2[v[i][j].x]>v[i][j].y)
{
v2[v[i][j].x]=v[i][j].y;
if(v[i][j].x>rasp2)
{
rasp2++;
}
}
}
}
g<<rasp<<'\n'<<rasp2;
return 0;
}