Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 9
- 4 1 4
- 2 0 2 1 2 0 2
- 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1
- 7
- 3 1 3
- 1 1 1 1 1 1 1
- */
- /*
- Task : _example
- Author : Phumipat C. [MAGCARI]
- Language: C++
- Created : 19 February 2023 [10:59]
- */
- #include<bits/stdc++.h>
- using namespace std;
- int divide(int leftBoundary,int rightBoundary,int number,int leftConsidering,int rightConsidering){
- if(rightBoundary < leftConsidering || leftBoundary > rightConsidering) return 0;
- if(number <= 1) return number;
- int mid = (leftBoundary+rightBoundary-1)/2;
- int leftResult = divide(leftBoundary,mid,number/2,leftConsidering,rightConsidering);
- int middleResult = divide(mid+1,mid+1,number%2,leftConsidering,rightConsidering);
- int rightResult = divide(mid+2,rightBoundary,number/2,leftConsidering,rightConsidering);
- return leftResult + middleResult + rightResult;
- }
- int main(){
- int startNumber,l,r;
- scanf("%d %d %d",&startNumber,&l,&r);
- int n = 1;
- while(n < startNumber) n = (2*n) + 1;
- printf("%d\n",divide(1,n,startNumber,l,r));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement