Pagini recente » Cod sursa (job #1803452) | Cod sursa (job #1917922) | Cod sursa (job #1071200) | Cod sursa (job #425256) | Cod sursa (job #325220)
Cod sursa(job #325220)
#include <algorithm>
#define DIM 100005
#define CUL 65
using namespace std;
struct bila {int x,in;} a[DIM];
int s[CUL][DIM];
int n,m;
void read ()
{
int i;
scanf ("%d%d",&n,&m);
for (i=1; i<=n; ++i)
scanf ("%d%d",&a[i].in,&a[i].x);
}
int cmp (bila a,bila b)
{
return a.in<b.in;
}
void prec ()
{
int i,j;
for (i=1; i<CUL; ++i)
for (j=1; j<=n; ++j)
if (a[j].x==i)
s[i][j]=s[i][j-1]+1;
else
s[i][j]=s[i][j-1];
}
void update (int x,int y)
{
int st,dr,mij;
for (st=1, dr=n; st<=dr; )
{
mij=(st+dr)/2;
if (a[mij].in==x)
{
a[mij].in+=y;
return ;
}
else if (a[mij].in<x)
st=mij+1;
else
dr=mij-1;
}
}
void getmax (int a,int b)
{
int i,maxim=0;
for (i=1; i<CUL; ++i)
if (s[i][b]-s[i][a-1]>maxim)
maxim=s[i][b]-s[i][a-1];
printf ("%d\n",maxim);
}
void ask (int x,int y)
{
int st,dr,mij,s1,s2;
for (st=1, dr=n; st<=dr; )
{
mij=(st+dr)/2;
if (a[mij].in<=x)
{
s1=mij;
st=mij+1;
}
else if (a[mij-1].in<x)
{
s1=mij;
break;
}
else
dr=mij-1;
}
for (st=1, dr=n; st<=dr; )
{
mij=(st+dr)/2;
if (a[mij].in<=y)
{
s2=mij;
st=mij+1;
}
else if (a[mij-1].in<y)
{
s2=mij;
break;
}
else
dr=mij-1;
}
getmax (s1,s2);
}
void query ()
{
int i,tip,x,y;
for (i=1; i<=m; ++i)
{
scanf ("%d%d%d",&tip,&x,&y);
if (tip==1)
ask (x,y);
else
update (x,y);
}
}
int main ()
{
freopen ("marbles.in","r",stdin);
freopen ("marbles.out","w",stdout);
read ();
sort (a+1,a+n+1,cmp);
prec ();
query ();
return 0;
}