Pagini recente » Cod sursa (job #1556953) | Cod sursa (job #313735) | Cod sursa (job #1451840) | Cod sursa (job #109992) | Cod sursa (job #1259841)
#include <cstdio>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
struct bila
{
int x, c;
}v[100005];
bool cmp(bila a, bila b)
{
return a.x<b.x;
}
int n, m, x, y, i, j, p, u, mij, op, mx, a, b, r[67][100005];
int main()
{
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].c);
sort(v+1, v+n+1, cmp);
for(j=1;j<=n;j++)
for(i=1;i<=64;i++)
{
r[i][j]=r[i][j-1];
if(v[j].c==i) r[i][j]++;
}
while(m--)
{
scanf("%d%d%d", &op, &x, &y);
if(op==0)
{
p=1;u=n;
while(p<=u)
{
mij=p+(u-p>>1);
if(v[mij].x==x) break;
if(v[mij].x>x) u=mij-1;
else p=mij+1;
}
if(p<=u) v[mij].x+=y;
continue;
}
p=1;u=n;a=0;
while(p<=u)
{
mij=p+(u-p>>1);
if(v[mij].x>=x)
{
a=mij;
u=mij-1;
continue;
}
p=mij+1;
}
p=1;u=n;b=0;
while(p<=u)
{
mij=p+(u-p>>1);
if(v[mij].x<=y)
{
b=mij;
p=mij+1;
continue;
}
u=mij-1;
}
mx=0;
for(i=1;i<=64;i++)
{
x=r[i][b]-r[i][a-1];
if(x>mx) mx=x;
}
printf("%d\n", mx);
}
return 0;
}