Pagini recente » Cod sursa (job #1327052) | Cod sursa (job #1118519) | Cod sursa (job #192377) | Cod sursa (job #778347) | Cod sursa (job #466146)
Cod sursa(job #466146)
#include<fstream>
using namespace std;
int n, step;
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);
return sum1 - sum2;
}
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';
}
}