একটি অ্যারে `arr` আছে যেখানে `arr[i] = i * (-1)^i`। দেওয়া ইনডেক্স L থেকে R পর্যন্ত উপাদানগুলোর যোগফল বের করতে হবে।
ইনপুট
L = 2, R = 6
আউটপুট
4
ব্যাখ্যা — arr = {-1, 2, -3, 4, -5, 6}। L=2 থেকে R=6: 2 + (-3) + 4 + (-5) + 6 = 4।
সিম্পল পদ্ধতি (O(N))
int CalcArrSumLtoR(int L, int R){
int sum = 0;
for(int i=L; i<=R; i++) sum += i * pow(-1, i);
return sum;
}
অপ্টিমাইজড পদ্ধতি (O(1)) — গাণিতিক সূত্র
- জোড় সংখ্যার যোগফল (১ থেকে n): `n/2 * (n/2 + 1)`
- বিজোড় সংখ্যার যোগফল (১ থেকে n): `((n+1)/2)^2`
- ফাইনাল সম = (R পর্যন্ত জোড় যোগফল - L-1 পর্যন্ত জোড় যোগফল) - (R পর্যন্ত বিজোড় যোগফল - L-1 পর্যন্ত বিজোড় যোগফল)
উদাহরণ কোড (অপ্টিমাইজড)
#include <iostream>
using namespace std;
long findSum(int n, bool isEven){
long total = isEven ? n/2 : (n+1)/2;
return isEven ? total*(total+1) : total*total;
}
int CalcArrSumLtoR(int L, int R){
return (findSum(R, true) - findSum(L-1, true)) - (findSum(R, false) - findSum(L-1, false));
}
int main(){
int L = 3, R = 15;
cout << "Sum from " << L << " to " << R << " = " << CalcArrSumLtoR(L, R);
return 0;
}
আউটপুট
Sum of elements of array from index 3 to 15 is -9