#include "bits/stdc++.h"
using namespace std;
struct Nodo{
long long Suma, Uneado;
};
vector<Nodo> _rbol;
long long Consulta(long long Izquierda, long long Derecha, long long Posici_n, long long Inicio, long long Final){
if(Izquierda >= Inicio and Derecha <= Final) return _rbol[Posici_n].Suma;
else if(Izquierda > Final or Derecha < Inicio) return 0;
else {
long long Promedio = (Izquierda + Derecha) / 2;
if(_rbol[Posici_n].Uneado == 1 and Izquierda != Derecha){
_rbol[Posici_n * 2].Suma = Promedio - Izquierda + 1;
_rbol[Posici_n * 2 + 1].Suma = Derecha - (Promedio + 1) + 1;
_rbol[Posici_n * 2].Uneado = 1;
_rbol[Posici_n * 2 + 1].Uneado = 1;
_rbol[Posici_n].Uneado = 0;
}
return Consulta(Izquierda, Promedio, Posici_n * 2, Inicio, Final) + Consulta(Promedio + 1, Derecha, Posici_n * 2 + 1, Inicio, Final);
}
}
void Actualizar(long long Izquierda, long long Derecha, long long Posici_n, long long Inicio, long long Final){
if(Izquierda >= Inicio and Derecha <= Final){
_rbol[Posici_n].Uneado = 1;
_rbol[Posici_n].Suma = Derecha - Izquierda + 1;
} else if(Izquierda > Final or Derecha < Inicio) return;
else {
long long Promedio = (Izquierda + Derecha) / 2;
if(_rbol[Posici_n].Uneado == 1 and Izquierda != Derecha){
_rbol[Posici_n * 2].Suma = Promedio - Izquierda + 1;
_rbol[Posici_n * 2 + 1].Suma = Derecha - (Promedio + 1) + 1;
_rbol[Posici_n * 2].Uneado = 1;
_rbol[Posici_n * 2 + 1].Uneado = 1;
_rbol[Posici_n].Uneado = 0;
}
Actualizar(Izquierda, Promedio, Posici_n * 2, Inicio, Final);
Actualizar(Promedio + 1, Derecha, Posici_n * 2 + 1, Inicio, Final);
_rbol[Posici_n].Suma = _rbol[Posici_n * 2].Suma + _rbol[Posici_n * 2 + 1].Suma;
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
long long n, m;
cin>>m;
n = 10e7 + 5;
Nodo E;
E.Suma = 0;
E.Uneado = 0;
_rbol.assign(n * 4, E);
n--;
long long C = 0;
while(m--){
long long Tipo;
cin>>Tipo;
if(Tipo == 1){
long long l, r;
cin>>l>>r;
l--;
r--;
long long Consultado = Consulta(0, n, 1, l + C, r + C);
C += Consultado;
cout<<Consultado<<"\n";
} else {
long long l, r;
cin>>l>>r;
l--;
r--;
Actualizar(0, n, 1, l + C, r + C);
}
/*for(auto i: _rbol) cout<<i.Suma<<" ";
cout<<"\n";
for(auto i: _rbol) cout<<i.Uneado<<" ";
cout<<"\n";*/
}
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
64 ms |
262144 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |