Pagini recente » Cod sursa (job #3211964) | Cod sursa (job #993520) | Cod sursa (job #809447) | Cod sursa (job #2146599) | Cod sursa (job #2536024)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=100000;
int aib[65][3*N+70],cul[3*N+70],cnt;
int vec[3*N+70];
bool vf[70];
const int val=1<<17;
char next_char()
{
static char buff[val];
static int bp=val;
if(bp==val)
{
bp=0;
fread(buff,1,val,stdin);
}
return buff[bp++];
}
void get(int &a)
{
a=0;
int semn=1;
char ch;
do
{
ch=next_char();
if(ch=='-')
semn=-1;
}
while('0'>ch||ch>'9');
do
{
a=a*10+(ch-'0');
ch=next_char();
}
while('0'<=ch&&ch<='9');
a*=semn;
}
struct mazan
{
int t,a,b;
} v[N+1],vv[N+1];
int lsb(int x)
{
return x&-x;
}
void update(int care,int poz,int val)
{
for(; poz<=cnt; poz+=lsb(poz))
aib[care][poz]+=val;
}
int ask(int care,int poz)
{
int sum=0;
for(; poz>0; poz-=lsb(poz))
sum+=aib[care][poz];
return sum;
}
int val1(int poz)
{
int r=0,pas=1<<18;
while(pas)
{
if(r+pas<=cnt&&vec[r+pas]<=poz)
r+=pas;
pas/=2;
}
return r;
}
int main()
{
freopen("marbles.in","r",stdin);
freopen("marbles.out","w",stdout);
int n,m,max1=0,i,j,x;
get(n);
get(m);
for(i=1; i<=n; i++)
{
get(vv[i].a);
get(vv[i].b);
vec[++cnt]=vv[i].a;
vec[++cnt]=vv[i].b;
}
for(i=1; i<=m; i++)
{
get(v[i].t);
get(v[i].a);
get(v[i].b);
vec[++cnt]=v[i].a;
if(!vf[v[i].b])
vec[++cnt]=v[i].b;
vf[v[i].b]=1;
if(v[i].t==0)
vec[cnt]=v[i].a+v[i].b;
}
sort(vec+1,vec+cnt+1);
int cnt1=0;
for(i=1; i<=cnt; i++)
if(vec[i]!=vec[i-1])
vec[++cnt1]=vec[i];
cnt=cnt1;
int maxx=0;
for(i=1; i<=n; i++)
{
vv[i].a=val1(vv[i].a);
vv[i].b=val1(vv[i].b);
maxx=max(maxx,vv[i].b);
cul[vv[i].a]=vv[i].b;
update(vv[i].b,vv[i].a,1);
}
for(i=1; i<=m; i++)
{
if(v[i].t==0)
{
x=v[i].a;
v[i].a=val1(v[i].a);
v[i].b=val1(x+v[i].b);
cul[v[i].b]=cul[v[i].a];
cul[v[i].a]=0;
update(cul[v[i].b],v[i].b,1);
update(cul[v[i].b],v[i].a,-1);
}
else
{
v[i].a=val1(v[i].a);
v[i].b=val1(v[i].b);
max1=0;
for(j=1; j<=maxx; j++)
max1=max(max1,ask(j,v[i].b)-ask(j,v[i].a-1));
cout<<max1<<'\n';
}
}
return 0;
}