I have been stuck on this problem for too long Why do I get TLE? What changes can I make to avoid this error? Any help is greatly appreciated. ```cpp
#pragma GCC optimize(“Ofast,unroll-loops”)
#include <bits/stdc++.h>
using namespace std;
const int N = 100100;
struct S {
int lc, rc, sum;
bool lazy;
} segt[64 * N];
int qry, x, y, op, ans, top = 1;
void push(int loc, int tl, int tr) {
if (!segt[loc].lc) segt[loc].lc = ++top;
if (!segt[loc].rc) segt[loc].rc = ++top;
if (segt[loc].lazy) {
int tmid = (tl + tr) / 2;
segt[segt[loc].lc].lazy = true;
segt[segt[loc].lc].sum = tmid - tl + 1;
segt[segt[loc].rc].lazy = true;
segt[segt[loc].rc].sum = tr - tmid;
segt[loc].lazy = false;
}
}
int query(int loc, int tl, int tr, int l, int r) {
if (!loc || tl > r || tr < l) return 0;
if (l <= tl && tr <= r) return segt[loc].sum;
push(loc, tl, tr);
int tmid = (tl + tr) / 2;
return query(segt[loc].lc, tl, tmid, l, r) + query(segt[loc].rc, tmid + 1, tr, l, r);
}
void update(int loc, int tl, int tr, int l, int r) {
if (!loc || tl > r || tr < l) return;
if (l <= tl && tr <= r) {
segt[loc].lazy = true;
segt[loc].sum = tr - tl + 1;
return;
}
push(loc, tl, tr);
int tmid = (tl + tr) / 2;
update(segt[loc].lc, tl, tmid, l, r);
update(segt[loc].rc, tmid + 1, tr, l, r);
segt[loc].sum = segt[segt[loc].lc].sum + segt[segt[loc].rc].sum;
}
signed main() {
cin.sync_with_stdio(0);
cin.tie(0);
cin >> qry;
while (qry–) {
cin >> op >> x >> y;
x += ans;
y += ans;
if (1 == op) {
ans = query(1, 1, 1000000000, x, y);
cout << ans << ‘\n’;
} else update(1, 1, 1000000000, x, y);
}
return 0;
}```