Pagini recente » Cod sursa (job #1314758) | Cod sursa (job #843006) | Cod sursa (job #168985) | Cod sursa (job #2673536) | Cod sursa (job #2549159)
#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
if(cx==-1 || cy==-1 || cx>cy)
nr=0;
else nr=cy-cx+1;
ans=max(nr,ans);
}
cout<<ans<<'\n';
}
else{
for(int I=1; I<=cmax; ++I) {
c=I;
cx=dreapta(x,c);
if(cx!=0 && cx<v[c].size() && 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=-1;
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=-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[cul][mij]>=val)
poz=mij, dr=mij-1;
else st=mij+1;
}
}