
- C++ Basics
- C++ Home
- C++ Overview
- C++ Environment Setup
- C++ Basic Syntax
- C++ Comments
- C++ Data Types
- C++ Variable Types
- C++ Variable Scope
- C++ Constants/Literals
- C++ Modifier Types
- C++ Storage Classes
- C++ Operators
- C++ Loop Types
- C++ Decision Making
- C++ Functions
- C++ Numbers
- C++ Arrays
- C++ Strings
- C++ Pointers
- C++ References
- C++ Date & Time
- C++ Basic Input/Output
- C++ Data Structures
- C++ Object Oriented
- C++ Classes & Objects
- C++ Inheritance
- C++ Overloading
- C++ Polymorphism
- C++ Abstraction
- C++ Encapsulation
- C++ Interfaces
Find element position in given monotonic Sequence in C++
Concept
With respect of a given integer l and a monotonic increasing sequence −
f(m) = am + bm [log2(m)] + cm^3 where (a = 1, 2, 3, …), (b = 1, 2, 3, …), (c = 0, 1, 2, 3, …) Remember,here, [log2(m)] indicates, taking the log to the base 2 and round the value down.As a result of this,
if m = 1, the value is 0.
if m = 2-3, the value is 1.
if m = 4-7, the value is 2.
if m = 8-15, the value is 3.
Our task is to determine the value m such that f(m) = l, if l doesn’t belong to the sequence then we have to print 0.
It should be noted that values are in such a way that they can be represented in 64 bits and the three integers a, b and c do not exceed 100.
Input
a = 2, b = 1, c = 1, l = 12168587437017
Output
23001 f(23001) = 12168587437017
Input
a = 7, b = 3, c = 0, l = 119753085330
Output
1234567890
Methods
Using Naive Approach − With respect of given values of a, b, c, find values of f(m) for every value of m and compare it.
Using Efficient Approach − Implement Binary Search, select m = (min + max) / 2 where min and max are indicated as the minimum and maximum values possible for m then,
- If f(m) < l then increment m.
- If f(m) > l then decrement m.
- If f(m) = l then m is the required answer.
- Now repeat the above steps until and unless the required value is found or it is not possible in the sequence.
Example
// C++ implementation of the approach #include <iostream> #include <math.h> #define SMALL_N 1000000 #define LARGE_N 1000000000000000 using namespace std; // Shows function to return the value of f(m) for given values of a, b, c, m long long func(long long a1, long long b1, long long c1, long long m){ long long res1 = a1 * m; long long logVlaue1 = floor(log2(m)); res1 += b1 * m * logVlaue1; res1 += c1 * (m * m * m); return res1; } long long getPositionInSeries1(long long a1, long long b1, long long c1, long long l){ long long start1 = 1, end1 = SMALL_N; // Now if c is 0, then value of m can be in order of 10^15. // Now if c1!=0, then m^3 value has to be in order of 10^18 // so maximum value of m can be 10^6. if (c1 == 0) { end1 = LARGE_N; } long long ans1 = 0; // Now for efficient searching, implement binary search. while (start1 <= end1) { long long mid1 = (start1 + end1) / 2; long long val1 = func(a1, b1, c1, mid1); if (val1 == l) { ans1 = mid1; break; } else if (val1 > l) { end1 = mid1 - 1; } else { start1 = mid1 + 1; } } return ans1; } // Driver code int main(){ long long a1 = 2, b1 = 1, c1 = 1; long long l = 12168587437017; cout << getPositionInSeries1(a1, b1, c1, l)<<endl; long long a2 = 7, b2 = 3, c2 = 0; long long l1 = 119753085330; cout << getPositionInSeries1(a2, b2, c2, l1)<<endl; long long a3 = 6, b3 = 2, c3 = 1; long long l2 = 11975309533; cout << getPositionInSeries1(a3, b3, c3, l2)<<endl; return 0; }
Output
23001 1234567890 0
- Related Articles
- Find element position in given monotonic sequence in Python
- Find bitonic point in given bitonic sequence in Python
- Program to find sum of given sequence in C++
- C++ Program to Find kth Largest Element in a Sequence
- Program to find nth sequence after following the given string sequence rules in Python
- Adding an element at a given position of the array in Javascript
- Removing an element from a given position of the array in Javascript
- Python Program to check if the given array is Monotonic
- Find First and Last Position of Element in Sorted Array in Python
- Program to find last digit of the given sequence for given n in Python
- C++ Program to find out the distinct elements in a given sequence
- Program to insert new element into a linked list before the given position in Python
- Find position of an element in a sorted array of infinite numbers in C++
- How to find left position of element in horizontal scroll container using jQuery?
- Find the position of box which occupies the given ball in Python
