Pagini recente » Cod sursa (job #352379) | Cod sursa (job #2174617) | Cod sursa (job #2033444) | Cod sursa (job #2383052) | Cod sursa (job #2549112)
#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,C[70],ans,nr,cx,cy;
set <int> fr;
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;
if(fr.find(c)!=fr.end())
C[++C[0]]=c;
fr.insert(c);
v[c].push_back(x);
}
for(int I=1; I<=C[0]; ++I)
sort(v[C[I]].begin(), v[C[I]].end());
for(int i=1; i<=M; ++i)
{
cin>>op>>x>>y;
if(op==1)
{
ans=0;
for(int I=1; I<=C[0]; ++I) {
c=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<=C[0]; ++I)
{
cx=dreapta(x,c);
if(cx!=0)
{
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;
}
}