Pagini recente » Cod sursa (job #3134941) | Cod sursa (job #1642550) | Cod sursa (job #2302613) | Cod sursa (job #2720560) | Cod sursa (job #1174968)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("marbls.in");
ofstream g("marbls.out");
long n,i,j,t,val,el1,el2,maxx,val2,m,c[65][100001],st,dr,mij;
struct ab{
long x,y;
};
ab v[100001];
int comp(ab a,ab b)
{
if (a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
int main()
{
f>>n>>m;
for (i=1;i<=n;i++)
f>>v[i].x>>v[i].y;
sort(v+1,v+n+1,comp);
for (i=1;i<=n;i++)
for (j=1;j<=64;j++)
if (v[i].y==j)
c[j][i]=c[j][i-1]+1;
else
c[j][i]=c[j][i-1];
for (i=1;i<=m;i++)
{
f>>t>>val>>val2;
if (t==0)
{
st=1;
dr=n;
mij=(st+dr)/2;
while (v[mij].x!=val)
{
if (v[mij].x>val)
dr=mij-1;
else
st=mij+1;
mij=(st+dr)/2;
}
v[mij].x+=val2;
}
else
{
st=1;
dr=n;
mij=(st+dr)/2;
while (v[mij].x!=val && st<dr)
{
if (v[mij].x>val)
dr=mij-1;
else
st=mij+1;
mij=(st+dr)/2;
}
if (v[dr].x>=val)
el1=dr;
else
el1=dr+1;
st=1;
dr=n;
mij=(st+dr)/2;
while (v[mij].x!=val2 && st<dr)
{
if (v[mij].x>val2)
dr=mij-1;
else
st=mij+1;
mij=(st+dr)/2;
}
if (v[dr].x<=val2)
el2=dr;
else
el2=dr-1;
el1--;
maxx=0;
for (j=1;j<=64;j++)
if (c[j][el2]-c[j][el1]>maxx)
maxx=c[j][el2]-c[j][el1];
g<<maxx<<'\n';
}
}
f.close();
g.close();
return 0;
}