Pagini recente » Cod sursa (job #56801) | Cod sursa (job #3271162) | Cod sursa (job #546457) | Cod sursa (job #2631304) | Cod sursa (job #309474)
Cod sursa(job #309474)
//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;
VI a;
int main()
{
FILE* fin=fopen(in_file,"r");
FILE* fout=fopen(out_file,"w");
fscanf(fin,"%d%d",&n,&p);
a.resize((n>>5)+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>>5]&(1<<(i&31))) 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) a[i>>5]|=1<<(i&31);
else FOR(i,x-1,x+y-2) a[i>>5]&=~(1<<(i&31));
}
}
fclose(fin);
fclose(fout);
return 0;
}