Pagini recente » Cod sursa (job #2133519) | Cod sursa (job #1338500) | Cod sursa (job #2883788) | Cod sursa (job #87193) | Cod sursa (job #449423)
Cod sursa(job #449423)
#include<stdio.h>
#include<algorithm>
using namespace std;
#define maxim(a,b) (a>b ? a : b)
int sol,n,m,c,nr;
int d[100002][67];
char s[104];
struct pereche
{
int x,y;
};
pereche q[100006];
int cmp(const pereche& a,const pereche& b)
{
return (a.x<b.x);
}
int main ()
{
int i,j,st,dr,mij,a;
int sol1,sol2,b,tip;
int semn;
freopen("marbles.in","r",stdin);
freopen("marbles.out","w",stdout);
scanf("%d%d\n",&n,&m);
for(i=1;i<=n;i++)
{
gets(s);
nr=strlen(s);
st=0;a=0;b=0;
for(j=0;j<nr;j++)
{
if(s[j]==' ')
{
st=1;
continue;
}
if(!st)
a=a*10+s[j]-'0';
else
b=b*10+s[j]-'0';
}
c=maxim(c,b);
q[i].x=a;
q[i].y=b;
}
sort(q+1,q+n+1,cmp);
for(i=1;i<=n;i++)
for(j=1;j<=c;j++)
if(q[i].y==j)
d[i][j]=d[i-1][j]+1;
else
d[i][j]=d[i-1][j];
for(i=1;i<=m;i++)
{
gets(s);
nr=strlen(s);
tip=s[0]-'0';
st=0;a=0;b=0;semn=1;
for(j=2;j<nr;j++)
{
if(s[j]=='-')
{
semn=-1;
continue;
}
if(s[j]==' ')
{
st=1;
a*=semn;
semn=1;
continue;
}
if(!st)
a=a*10+s[j]-'0';
else
b=b*10+s[j]-'0';
}
b*=semn;
if(!tip)
{
st=1;dr=n;
while(st<=dr)
{
mij=(st+dr)/2;
if(q[mij].x<a)
st=mij+1;
else
if(q[mij].x>a)
dr=mij-1;
else
break;
}
if(st<=dr)
q[mij].x+=b;
continue;
}
st=1;dr=n;
a--;
sol1=0;
while(st<=dr)
{
mij=(st+dr)/2;
if(q[mij].x<=a)
{
st=mij+1;
sol1=mij;
}
else
dr=mij-1;
}
sol2=0;
st=sol1;dr=n;
while(st<=dr)
{
mij=(st+dr)/2;
if(q[mij].x<=b)
{
st=mij+1;
sol2=mij;
}
else
dr=mij-1;
}
sol=0;
for(j=1;j<=c;j++)
sol=maxim(sol,d[sol2][j]-d[sol1][j]);
printf("%d\n",sol);
}
return 0;
}