Pagini recente » Cod sursa (job #172726) | Cod sursa (job #502462) | Cod sursa (job #1126933) | Cod sursa (job #1229763) | Cod sursa (job #1211582)
#include <cstdio>
#include <algorithm>
#define Nmax 100005
using namespace std;
struct bila
{
int x,cul;
bool operator <(const bila A) const
{
return x<A.x;
}
};
bila v[Nmax];
int s[65][Nmax],N;
inline int BS0(int x)
{
int st=1,dr=N,mij;
while(st<=dr)
{
mij=((st+dr)>>1);
if(v[mij].x==x)
return mij;
if(v[mij].x<x)
st=mij+1;
else
dr=mij-1;
}
}
inline int BS1(int x)
{
int st=1,dr=N,mij,sol=-1;
while(st<=dr)
{
mij=((st+dr)>>1);
if(v[mij].x>=x)
{
sol=mij;
dr=mij-1;
}
else
st=mij+1;
}
return sol;
}
inline int BS2(int x)
{
int st=1,dr=N,mij,sol=-1;
while(st<=dr)
{
mij=((st+dr)>>1);
if(v[mij].x<=x)
{
sol=mij;
st=mij+1;
}
else
dr=mij-1;
}
return sol;
}
int main()
{
int M,i,j,tip,x,y,p1,p2,sol;
freopen ("marbles.in","r",stdin);
freopen ("marbles.out","w",stdout);
scanf("%d%d", &N,&M);
for(i=1;i<=N;++i)
scanf("%d%d", &v[i].x,&v[i].cul);
sort(v+1,v+N+1);
for(i=1;i<=64;++i)
for(j=1;j<=N;++j)
s[i][j]=s[i][j-1]+(v[j].cul==i);
while(M--)
{
scanf("%d%d%d", &tip,&x,&y);
if(!tip)
v[BS0(x)].x=x+y;
else
{
p1=BS1(x); p2=BS2(y); sol=0;
if(p1!=-1 && p2!=-1)
for(i=1;i<=64;++i)
sol=max(sol,s[i][p2]-s[i][p1-1]);
printf("%d\n", sol);
}
}
return 0;
}