Pagini recente » Cod sursa (job #2067123) | Cod sursa (job #213859) | Cod sursa (job #544468) | Cod sursa (job #1672003) | Cod sursa (job #309480)
Cod sursa(job #309480)
//Code by Patcas Csaba
//Time complexity: O(m * n)
//Space complexity: O(n)
//Method: Brute pe biti
//Working time: 5 minutes
#include <stdio.h>
#include <ctype.h>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <iostream>
#include <sstream>
#include <numeric>
#include <algorithm>
#include <cmath>
#include <queue>
#include <bitset>
using namespace std;
#define in_file "hotel.in"
#define out_file "hotel.out"
#define VI vector <int>
#define FORN(i,n) for(int i=0;i<n;++i)
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define S size()
#define B begin()
#define E end()
#define X first
#define Y second
#define PB push_back
#define MP make_pair
#define ALL(x) x.begin(),x.end()
#define repeat do{
#define until(x) }while(!(x));
int n, p;
vector <long long> a;
int main()
{
FILE* fin=fopen(in_file,"r");
FILE* fout=fopen(out_file,"w");
fscanf(fin,"%d%d",&n,&p);
a.resize((n>>6)+1);
FORN(q,p)
{
int op;
fscanf(fin,"%d",&op);
if (op==3)
{
int now=0, best=0;
FOR(i,0,n-1)
if (a[i>>6]&(1LL<<(i&63))) now=0;
else
{
++now;
best=max(best,now);
}
fprintf(fout,"%d\n",best);
}
else
{
int x, y;
fscanf(fin,"%d%d",&x,&y);
if (op==1)
FOR(i,x-1,x+y-2)
if (!(i&63) && i+64<=x+y-2)
{
a[i>>6]=0xffffffffffffffff;
i+=63;
}
else a[i>>6]|=1LL<<(i&63);
else
{
FOR(i,x-1,x+y-2)
if (!(i&63) && i+64<=x+y-2)
{
a[i>>6]=0;
i+=63;
}
else a[i>>6]&=~(1LL<<(i&63));
}
}
}
fclose(fin);
fclose(fout);
return 0;
}