Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <fstream>
- #include <algorithm>
- #include <set>
- #include <iomanip>
- #include <cmath>
- #include <map>
- #include <queue>
- #include <string>
- #define len(v) (int)v.size()
- #define all(v) v.begin(), v.end()
- #define rall(v) v.rbegin(), v.rend()
- #define ll long long
- using namespace std;
- const int maxn = 510;
- const ll inf = 1e9;
- const ll mod = 1e9 + 7;
- ll binpow(ll a, ll n) {
- if (n == 0)
- return 1ll;
- else if (n % 2)
- return (binpow(a, n - 1) * a) % mod;
- else {
- ll b = binpow(a, n / 2) % mod;
- return (b * b) % mod;
- }
- }
- ll sm(ll b, ll q, ll n) {
- if (n < 0)
- return 0;
- return (((b * ((binpow(q, n) % mod) - 1)) % mod) / (q - 1)) % mod;
- }
- void solve() {
- ll i1, i2, j1, j2;
- cin >> i1 >> i2 >> j1 >> j2;
- ll p2i1 = binpow(2, i1) % mod;
- ll p3j1 = binpow(3, j1) % mod;
- ll p3j2 = binpow(3, j2) % mod;
- ll p2i2 = binpow(2, i2) % mod;
- ll t = binpow(3, j2 - j1 + 1) % mod;
- ll c = binpow(2, i2 - i1 + 1) % mod;
- t--;
- c--;
- //ll si = ((((p2i1 * p3j1) % mod) * t) % mod) / 2;
- //ll s = (si * c) % mod;
- //cout << s % mod << endl;
- //p2i1 = ((p2i1 * p3j1) % mod + mod) % mod;
- //p2i1 = ((p2i1 * t) % mod + mod) % mod;
- //p2i1 /= 2ll;
- //ll s = ((p2i1 * c) % mod + mod) % mod;
- //cout << s << endl;
- ll si = (sm(p2i1, 3, j2 + 1) % mod) - (sm(p2i1, 3, j1) % mod);
- ll s = (sm(si, 2, i2 - i1 + 1) % mod + mod) % mod;
- cout << s % mod << endl;
- }
- signed main() {
- ios::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- int q; cin >> q;
- while (q--)
- solve();
- }
Advertisement
Add Comment
Please, Sign In to add comment