Pagini recente » Cod sursa (job #136860) | Cod sursa (job #1023712) | Cod sursa (job #2151871) | Cod sursa (job #2558943) | Cod sursa (job #1844917)
#include <cstdio>
#define MAXFIB 200
#define MAXNR (2e16)
using namespace std;
long long fib[MAXFIB];
inline long long minim(long long a, long long b){
return (a < b ? a : b);
}
inline long long maxim(long long a, long long b){
return (a > b ? a : b);
}
int binarySearch(long long val)
{
int step, ans = 0;
for(step=(1<<6); step>=1; step>>=1)
if(fib[ans + step] < val)
ans += step;
return ans+1;
}
int main()
{
freopen("fibo3.in", "r", stdin);
freopen("fibo3.out", "w", stdout);
int q, i, pos1, pos2;
long long x1, y1, x2, y2, ans = 0;
scanf("%d", &q);
fib[1] = 1;
fib[2] = 2;
i = 2;
while(fib[i] + fib[i-1] <= MAXNR)
{
fib[i+1] = fib[i] + fib[i-1];
++i;
}
while(q--)
{
ans = 0;
scanf("%lld%lld%lld%lld", &x1, &y1, &x2, &y2);
pos1 = binarySearch(x1+y1);
pos2 = binarySearch(x2+y2+1)-1;
for(i=pos1; i<=pos2; ++i)
ans += minim(x2, fib[i]-y1) - maxim(x1, fib[i]-y2) + 1;
printf("%lld\n", ans);
}
return 0;
}