Cod sursa(job #2396084)

Utilizator alex2209alexPavel Alexandru alex2209alex Data 3 aprilie 2019 10:53:49
Problema Diamant Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#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;
}