Codeforces Round #419 (Div. 1), problem: (E) Karen and Neighborhood Solution In C/C++

#include <bits/stdc++.h>
using namespace std;

typedef pair<long long,long long> ii;

long long n,k,i,w,res;
long long m[65];
map <long long,long long> num,f,c;

long long get(long long t) {
if (f[t]>=0) return f[t];
f[t]=get((t-1)/2)+get(t/2);
if (c[t]==1) f[t]++;
return f[t];
}

void cal(long long t) {
if (c[t]==1) k–;
if (k==0) {
res+=(t-1)/2+1;
return;
}

if (f[(t-1)/2]>=k) cal((t-1)/2);
else {
res+=t-(t/2);
k-=f[(t-1)/2];
cal(t/2);
}
}

int main() {
#ifndef ONLINE_JUDGE
freopen(“815E.inp”,”r”,stdin);
freopen(“815E.out”,”w”,stdout);
#endif // ONLINE_JUDGE

scanf(“%lld %lld”,&n,&k);

if (k==1) {
printf(“1”);
return 0;
}
if (k==2) {
printf(“%lld”,n);
return 0;
}

k-=2; n-=2;

for (i=1;i<=60;i++) {
if (i==1) {
m[1]=n;
num[n]=1;
}
else {
m[i]=(m[i-1]-1)/2;
num[m[i]]+=num[m[i-1]];
num[m[i-1]/2]+=num[m[i-1]]+num[m[i-1]+1];
num[m[i]+1]+=num[m[i-1]+1];
}
f[m[i]]=-1; f[m[i]+1]=-1;
if (m[i]==0) break;
}
num[0]=0;
num[1]+=num[2];
num[2]=0;

for (i=1;i<=60;i++) {
if (k<=num[m[i]]+num[m[i]+1]) {
if (m[i]%2==1) {
c[m[i]]=1;
c[m[i]+1]=1;
}
else {
if (k<=num[m[i]+1]) c[m[i]+1]=1;
else c[m[i]]=1,k-=num[m[i]+1];
}
break;
}
else k-=num[m[i]]+num[m[i]+1];
}
if (c[1]==1) c[2]=1;
f[0]=0;
get(n);
cal(n);
printf(“%lld”,res+1);
}

Advertisement

spot_img

Power bank triggers fire...

A routine afternoon journey turned into a moment of...

The Real Truth About...

📢 As an Amazon Associate, I earn from qualifying...

Can a man kill...

Pop culture and action cinema often feed the dramatic...

7 Reasons This Viral...

📢 As an Amazon Associate, I earn from qualifying...

Can you have just...

Welcoming a pet ferret into your home is an...

We Tested Viral Kitchen...

📢 As an Amazon Associate, I earn from qualifying...

Power bank triggers fire in Mumbai local train, no injury reported

A routine afternoon journey turned into a moment of acute terror for commuters on Central Railway after a portable power bank abruptly caught fire...

The Real Truth About Viral Kitchen Gadgets Before You Buy

📢 As an Amazon Associate, I earn from qualifying purchases.Most products in this category disappoint within weeks. Cheap materials, vague instructions, and results that...

Can a man kill a bear with his hands?

Pop culture and action cinema often feed the dramatic fantasy of human triumph over apex predators, sparking a persistent debate: can a man kill...

7 Reasons This Viral Kitchen Gadgets Is Worth Every Single Penny

📢 As an Amazon Associate, I earn from qualifying purchases.Most products in this category disappoint within weeks. Cheap materials, vague instructions, and results that...

Can you have just one ferret?

Welcoming a pet ferret into your home is an exciting decision, but it frequently prompts an essential question for prospective owners: can you have...

We Tested Viral Kitchen Gadgets Here Is What You Must Know

📢 As an Amazon Associate, I earn from qualifying purchases.If you had told me six months ago that a single purchase would change how...

7 Reasons This Viral Kitchen Gadgets Is Worth Every Single Penny

📢 As an Amazon Associate, I earn from qualifying purchases.After putting the Viral Kitchen Gadgets through a proper 30-day real-world test, I can tell...

Building India’s deep-tech enterprise pipeline: from IP to IPO

India’s startup ecosystem has earned global acclaim for its consumer tech and software-as-a-service (SaaS) platforms. However, the nation’s next major economic frontier lies in...

Everything You Need to Know About Viral Kitchen Gadgets Right Now

📢 As an Amazon Associate, I earn from qualifying purchases.After putting the Viral Kitchen Gadgets through a proper 30-day real-world test, I can tell...