Pagini recente » Cod sursa (job #1163844) | Cod sursa (job #1585029) | Cod sursa (job #2436450) | Cod sursa (job #487121) | Cod sursa (job #1324779)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("fibo3.in");
ofstream g ("fibo3.out");
const int NMAX = 100000 + 1;
const long long LMAX = 1000000000000000LL;
int n;
int nr_fib;
vector <long long> fib;
void preproceseaza() {
fib.push_back(1);
fib.push_back(1);
int nr = 1;
while (fib[nr] < LMAX) {
nr++;
fib.push_back(fib[nr - 2] + fib[nr - 1]);
//cout << nr << ' ' << fib[nr] << endl;
}
nr_fib = nr;
}
int cauta(long long x) {
if (x <= 1) return 1;
int st = 1, dr = nr_fib, m, sol = -1;
while (st <= dr) {
m = (st + dr) / 2;
if (fib[m] < x) {
sol = m;
st = m + 1;
}
else dr = m - 1;
}
return sol;
}
void rezolva() {
long long a, b, c, d;
for (int i = 1; i <= n; i++) {
f >> a >> b >> c >> d;
int j = 1, rez = 0;
j = cauta(a + b);
while (fib[j] <= c + d) {
rez += min(c, fib[j] - b) - max(a, fib[j] - d) + 1;
j++;
}
g << rez << '\n';
}
}
int main() {
preproceseaza();
f >> n;
rezolva();
}