Pagini recente » Cod sursa (job #1990087) | Cod sursa (job #2406587) | Cod sursa (job #1793028) | Cod sursa (job #143797) | Cod sursa (job #1619768)
#include <fstream>
using namespace std;
ifstream fin ("hotel.in");
ofstream fout ("hotel.out");
struct ARBI { int st, dr, val; } A[300010];
int n, m;
void First_Update(int nod, int left, int right)
{
if (left == right)
{
A[nod].val = A[nod].st = A[nod].dr = 1;
return;
}
int mid = (left + right) >> 1;
First_Update((nod << 1), left, mid);
First_Update((nod << 1) + 1, mid + 1, right);
A[nod].val = A[(nod << 1)].val + A[(nod << 1) + 1].val;
A[nod].st = A[(nod << 1)].st + A[(nod << 1) + 1].st;
A[nod].dr = A[(nod << 1)].dr + A[(nod << 1) + 1].dr;
}
void Update(int nod, int left, int right, int start, int finish, int value)
{
if (left >= start && right <= finish)
{
A[nod].val = A[nod].st = A[nod].dr = value * (right - left + 1);
return;
}
int mid = (left + right) >> 1;
if (A[nod].val == (right - left + 1))
{
A[(nod << 1)].val = A[(nod << 1)].st = A[(nod << 1)].dr = mid - left + 1;
A[(nod << 1) + 1].val = A[(nod << 1) + 1].st = A[(nod << 1) + 1].dr = right - mid;
}
else if (A[nod].val == 0)
{
A[(nod << 1)].val = A[(nod << 1)].st = A[(nod << 1)].dr = 0;
A[(nod << 1) + 1].val = A[(nod << 1) + 1].st = A[(nod << 1) + 1].dr = 0;
}
if (start <= mid)
{
Update((nod << 1), left, mid, start, finish, value);
}
if (finish > mid)
{
Update((nod << 1) + 1, mid + 1, right, start, finish, value);
}
A[nod].val = max(A[(nod << 1)].dr + A[(nod << 1) + 1].st, max(A[(nod << 1)].val, A[(nod << 1) + 1].val));
A[nod].st = (A[(nod << 1)].st == (mid - left + 1) ? A[(nod << 1)].st + A[(nod << 1) + 1].st : A[(nod << 1)].st);
A[nod].dr = (A[(nod << 1) + 1].dr == (right - mid) ? A[(nod << 1) + 1].dr + A[(nod << 1)].dr : A[(nod << 1) + 1].dr);
}
int main()
{
fin >> n >> m;
First_Update(1, 1, n);
while (m --)
{
int tip, i, nr;
fin >> tip;
switch (tip)
{
case 1 :
{
fin >> i >> nr;
Update(1, 1, n, i, i + nr - 1, 0);
break;
}
case 2 :
{
fin >> i >> nr;
Update(1, 1, n, i, i + nr - 1, 1);
break;
}
case 3 :
{
fout << A[1].val << '\n';
break;
}
}
}
fout.close();
return 0;
}