/* */ //#pragma comment(linker, "/STACK:16777216") #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define y0 sdkfaslhagaklsldk #define y1 aasdfasdfasdf #define yn askfhwqriuperikldjk #define j1 assdgsdgasghsf #define tm sdfjahlfasfh #define lr asgasgash #define norm asdfasdgasdgsd #define eps 1e-9 #define M_PI 3.141592653589793 #define bs 1000000007 #define bsize 256 using namespace std; const int INF = 1e9; const int N = 500031; int tests; int tp[N]; long long l[N], r[N]; long long val[N]; vector interest; long long place[N]; int n; long long t[N]; vector compress(vector v) { vector temp = v; v.clear(); sort(temp.begin(), temp.end()); for (int i = 0; i < temp.size(); i++) { if (i == 0 || temp[i] != temp[i - 1]) v.push_back(temp[i]); } return v; } void build(int v, int tl, int tr) { t[v] = -2e18; if (tl == tr) return; int tm = tl + tr; tm /= 2; build(v * 2, tl, tm); build(v * 2 + 1, tm + 1, tr); } void update(int v, int tl, int tr, int ps, long long val) { if (tl == tr) { if (t[v] < -1e18) t[v] = val; else t[v] += val; return; } int tm = tl + tr; tm /= 2; if (ps <= tm) update(v * 2, tl, tm, ps, val); else update(v * 2 + 1, tm + 1, tr, ps, val); t[v] = max(t[v * 2], t[v * 2 + 1]); } long long get(int v, int tl, int tr, int l, int r) { if (l > r) return -2e18; if (tl == l&&tr == r) return t[v]; int tm = tl + tr; tm /= 2; return max(get(v * 2, tl, tm, l, min(r, tm)), get(v * 2 + 1, tm + 1, tr, max(tm + 1, l), r)); } long long pref_sum[10000]; long long steps[1000]; long long L; long long get_level(long long x) { int res = 0; for (int lev = 1; lev <= L; lev++) { if (pref_sum[lev] < x) res = lev; } return res; } long long get_par(long long x) { int whr = get_level(x); long long on_level = x - pref_sum[whr] - 1; //cout << x << "" << on_level << " "< b) { a = get_par(a); } else b = get_par(b); } } long long safe_mult(long long a, long long b) { if (a == 0 || b == 0) return 0; if (3e18 / b <= a) return 3e18; return a*b; } int main(){ //freopen("fabro.in","r",stdin); //freopen("fabro.out","w",stdout); //freopen("F:/in.txt", "r", stdin); //freopen("F:/output.txt", "w", stdout); ios_base::sync_with_stdio(0); //cin.tie(0); pref_sum[1] = 1; steps[0] = 1; steps[1] = 1; for (int i = 2;; i++) { L = i; steps[i] = steps[i - 1] + steps[i - 2]; pref_sum[i] = safe_mult((pref_sum[i - 1] - pref_sum[i - 2]), steps[i-1]) + pref_sum[i - 1]; //cout << i << " " << pref_sum[i] << endl; if (pref_sum[i] > 2e18) break; } //cout << L << endl; /*for (int i = 2; i <= 40; i++) { cout << i << " " << get_par(i) << " "<> a >> b) { cout << lca(a, b) << endl; } */ cin >> tests; for (int i = 1; i <= tests;i++) { cin >> tp[i]; cin >> l[i] >> r[i]; if (tp[i] == 1) cin >> val[i]; if (tp[i] == 1) { interest.push_back(lca(l[i], r[i])); place[i] = lca(l[i], r[i]); } } interest = compress(interest); if (interest.size() == 0) interest.push_back(1000000000000000007ll); n = interest.size(); build(1, 0,n-1); for (int i = 1; i <= tests;i++) { if (tp[i] == 1) { int id = lower_bound(interest.begin(), interest.end(), place[i]) - interest.begin(); update(1, 0, n - 1, id, val[i]); } else { int real_l, real_r; real_l = lower_bound(interest.begin(), interest.end(), l[i])-interest.begin(); real_r = upper_bound(interest.begin(), interest.end(), r[i]) - interest.begin() - 1; long long res = get(1, 0, n - 1, real_l, real_r); if (res < -1e18) cout << "Comisia" << "\n"; else cout << res << "\n"; } } cin.get(); cin.get(); return 0; }