Pagini recente » Cod sursa (job #742100) | Cod sursa (job #1428653) | Cod sursa (job #2338799) | Cod sursa (job #2394130) | Cod sursa (job #2549149)
#include <fstream>
#include <set>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
ifstream cin("marbles.in");
ofstream cout("marbles.out");
int N,M,op,x,y,c,cmax,ans,nr,cx,cy;
vector <int> v[70];
int stanga(int val, int cul); //
int dreapta(int val, int cul); //
int main()
{
cin>>N>>M;
for(int i=1; i<=N; ++i)
{
cin>>x>>c;
cmax=max(c,cmax);
v[c].push_back(x);
}
for(int I=1; I<=cmax; ++I)
sort(v[I].begin(), v[I].end());
for(int i=1; i<=M; ++i)
{
cin>>op>>x>>y;
if(op==1)
{
ans=0;
for(int I=1; I<=cmax; ++I) {
c=I;
///fata ia la
cy=stanga(y,c);
///fata ia la
cx=dreapta(x,c);
///uite asa se joaca, la noi, brasoveanca
nr=cy-cx+1;
if(nr<0)
nr=0;
ans=max(nr,ans);
}
cout<<ans<<'\n';
}
else{
for(int I=1; I<=cmax; ++I)
{
c=I;
cx=dreapta(x,c);
if(cx!=0 && v[c][cx]==x)
{
cx=dreapta(x,c);
v[c][cx]=y;
break;
}
}
}
}
return 0;
}
int stanga(int val, int cul)
{
int st=0, dr=v[cul].size()-1, mij=0,poz=0;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[cul][mij]<=val)
poz=mij, st=mij+1;
else dr=mij-1;
}
return poz;
}
int dreapta(int val, int cul)
{
int st=0, dr=v[cul].size()-1, mij=0, poz=0;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[cul][mij]>=val)
poz=mij, dr=mij-1;
else st=mij+1;
}
}