Pagini recente » Cod sursa (job #357291) | Cod sursa (job #2244613) | Cod sursa (job #2226602) | Cod sursa (job #589762) | Cod sursa (job #1604384)
#include <fstream>
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
struct coce{
bool ocupat;
int Max;
int from_left;
int from_right;
} v[500000] ;
int n,m,i,j,a,b,nr,c;
void update_arbore(int nod, int start, int stop, int pos)
{
if (start == stop)
{
v[nod].ocupat = !v[nod].ocupat;
if (v[nod].ocupat == true)
{
v[nod].Max = 1;
v[nod].from_left = 1;
v[nod].from_right = 1;
}
else
{
v[nod].Max = 0;
v[nod].from_left = 0;
v[nod].from_right = 0;
}
}
else
{
int mid = (start + stop ) / 2;
if (pos <= mid)
update_arbore(nod * 2, start, mid, pos);
else
update_arbore(nod * 2 + 1, mid + 1, stop, pos);
v[nod].Max = v[nod*2].Max+v[nod*2+1].Max;
if (v[nod*2].from_left == v[nod*2].Max)
v[nod].from_left = v[nod*2].Max + v[nod*2+1].from_left;
else
v[nod].from_left = v[nod*2].from_left;
if (v[nod*2+1].from_right == v[nod*2+1].Max)
v[nod].from_right == v[nod*2+1].Max + v[nod*2].from_right;
else
v[nod].from_right = v[nod*2+1].from_right;
}
}
int main()
{
fin>>n>>m;
for (i=1;i<=n;i++)
{
update_arbore(1, 1, n, i);
}
for (i=1;i<=m;i++)
{
fin>>c;
if (c == 1 || c == 2)
{
fin>>a>>nr;
b=a+nr-1;
for (j=a;j<=b;j++)
{
update_arbore(1, 1, n, j);
}
}
else
{
fout<<v[1].Max<<"\n";
}
}
return 0;
}