Pagini recente » Cod sursa (job #3127348) | Cod sursa (job #2781422) | Cod sursa (job #230209) | Cod sursa (job #2321434) | Cod sursa (job #466222)
Cod sursa(job #466222)
#include<fstream>
using namespace std;
int n, step;
unsigned long long fib[82], sum[82];
long long number(int x, int y)
{
if (x < 0 || y < 0) return 0;
int i, aux;
long long sum1 = 0, sum2 = 0;
for (i = 80, aux = step; aux; aux >>= 1)
if (i - aux >= 1 && fib[i - aux] > x + y)
i -= aux;
sum1 = sum[i] - (fib[i] - (x + y) - 1) * (i - 1);
for (i = 80, aux = step; aux; aux >>= 1)
if (i - aux >= 1 && fib[i - aux] > y - 1)
i -= aux;
sum2 = sum[i] - (fib[i] - y) * (i - 1);
sum1 -= sum2;
for (i = 80, aux = step; aux; aux >>= 1)
if (i - aux >= 1 && fib[i - aux] > x - 1)
i -= aux;
sum2 = sum[i] - (fib[i] - x) * (i - 1);
sum1 -= sum2;
return sum1;
}
int main()
{
ifstream fin("fibo3.in");
ofstream fout("fibo3.out");
fib[1] = 1, fib[2] = 2;
sum[1] = 0, sum[2] = 1;
for (int i = 3; i <= 80; ++i)
{
fib[i] = fib[i - 1] + fib[i - 2];
sum[i] = sum[i - 1] + (i - 1) * fib[i - 2];
}
for (step = 1; step << 1 <= 80; step <<= 1);
fin >> n;
for (int i = 1; i <= n; ++i)
{
int x_1, x_2, y_1, y_2;
fin >> x_1 >> y_1 >> x_2 >> y_2;
fout << number(x_2, y_2) - number(x_1 - 1, y_2) - number(x_2, y_1 - 1) + number(x_1 - 1, y_1 - 1) << '\n';
}
}