#include <bits/stdc++.h>
using namespace std;
#define ios ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define import <chatgpt>
//made by dudugyn :DD
#define int long long
#define f first
#define s second
#define pb push_back
#define sz(x) (int)(x.size())
#define all(x) (x).begin(),(x).end()
#define allr(x) (x).rbegin(),(x).rend()
#define endl '\n'
#define V vector
#define pii pair<int,int>
#define mem(x, v) memset((x), v, sizeof (x))
#define mid (l+r)/2
const int mod = (int)1e9+7;
const int inf = (int)LLONG_MAX;
template<class v>
auto operator<<(ostream &os, const vector<v> &vec)->ostream& {
os << vec[0];
for (size_t i = 1; i < vec.size(); i++) os << ' ' << vec[i];
os << '\n';
return os;
}
template<class v>
auto operator>>(istream &is, vector<v> &vec)->istream& {
for (auto &i : vec) is >> i;
return is;
}
template<class v>
auto operator<<(ostream &os, const vector<vector<v>> &vec)->ostream& {
for (auto &i : vec) {
os << i[0];
for (size_t j = 1; j < i.size(); j++) os << ' ' << i[j];
os << '\n';
}
return os;
}
template<class v>
auto operator>>(istream &is, vector<vector<v>> &vec)->istream& {
for (auto &i : vec)
for (auto &j : i) is >> j;
return is;
}
int n = (int)1e9;
struct Seg{
struct No{
int sum = 0, suml = 0;
No *l_c = nullptr, *r_c = nullptr;
};
No *raiz = new No;
void lazy(No *atual, int l, int r){
if(atual->suml == 1){
atual->sum = atual->suml * (r - l + 1);
if(l != r){
atual->l_c->suml = atual->suml;
atual->r_c->suml = atual->suml;
}
atual->suml = 0;
}
}
int update(No* atual, int ql, int qr, int x, int l = 0, int r = n-1){
if(!atual->l_c) atual->l_c = new No;
if(!atual->r_c) atual->r_c = new No;
lazy(atual, l, r);
if(r < ql || l > qr)return atual->sum;
if(l >= ql && r <= qr){
atual->suml = x;
lazy(atual, l, r);
return atual->sum;
}
return atual->sum = update(atual->l_c, ql, qr, x, mid+1, r) +
update(atual->r_c, ql, qr, x, l, mid);
}
int query(No* atual, int ql, int qr, int l = 0, int r = n-1){
if(!atual->l_c) atual->l_c = new No;
if(!atual->r_c) atual->r_c = new No;
lazy(atual, l, r);
if(l >= ql && r <= qr)return atual->sum;
if(r < ql || l > qr)return 0;
return query(atual->l_c, ql, qr, mid+1, r) +
query(atual->r_c, ql, qr, l, mid);
}
};
void solve(){
int qq;
cin >> qq;
int c = 0;
Seg seg;
while(qq--){
int op, l, r;
cin >> op >> l >> r;
--l, --r;
if(op == 1){
c = seg.query(seg.raiz, l + c, r + c);
cout<<c<<endl;
}else{
seg.update(seg.raiz, l + c, r + c, 1);
}
}
}
signed main() {
ios;
int tt=1;
//cin>>tt;
while(tt--){
solve();
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |