Pagini recente » Cod sursa (job #2418022) | Cod sursa (job #607801) | Cod sursa (job #110237) | Cod sursa (job #166551) | Cod sursa (job #2156605)
#include <fstream>
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
struct {
int maxi, stanga, dreapta;
} Arb[200010];
int n, m, x, y, q;
void Update(int nod, int st, int dr, int a, int b, int val) {
if (dr < a || st > b)
return;
int mij;
if (st >= a && dr <= b) {
Arb[nod].maxi = Arb[nod].dreapta = Arb[nod].stanga = val * (dr - st + 1);
} else {
mij = (st + dr) / 2;
if (Arb[nod].maxi == dr - st + 1) {
Arb[nod * 2].maxi = Arb[nod * 2].dreapta = Arb[nod * 2].stanga = (mij - st + 1);
Arb[nod * 2 + 1].maxi = Arb[nod * 2 + 1].dreapta = Arb[nod * 2 + 1].stanga = (dr - mij);
}
Update(nod * 2, st, mij, a, b, val);
Update(nod * 2 + 1, mij + 1, dr, a, b, val);
if (Arb[nod * 2].maxi == (mij - st + 1)) {
Arb[nod].stanga = Arb[nod * 2].maxi + Arb[nod * 2 + 1].stanga;
} else {
Arb[nod].stanga = Arb[nod * 2].stanga;
}
if (Arb[nod * 2 + 1].maxi == (dr - mij)) {
Arb[nod].dreapta = Arb[nod * 2 + 1].maxi + Arb[nod * 2].dreapta;
} else {
Arb[nod].dreapta = Arb[nod * 2 + 1].dreapta;
}
Arb[nod].maxi = max(max(Arb[nod * 2].maxi, Arb[nod * 2 + 1].maxi), Arb[nod * 2].dreapta + Arb[nod * 2 + 1].stanga);
}
}
int main()
{
fin >> n >> m;
Update(1, 1, n, 1, n, 1);
for (int i = 1 ; i <= m ; i++) {
fin >> q;
if (q == 3) fout << Arb[1].maxi << '\n';
else {
fin >> x >> y;
Update(1, 1, n, x, x + y - 1, q - 1);
}
}
return 0;
}