Pagini recente » Cod sursa (job #2342437) | Cod sursa (job #1600346) | Cod sursa (job #2491847) | Cod sursa (job #2629590) | Cod sursa (job #2536011)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("marbles.in");
ofstream out("marbles.out");
const int N=100000;
int aib[65][3*N+1],cul[3*N+1],cnt;
int vec[3*N+1];
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 val(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()
{
int n,m,max1=0,i,j,x;
in>>n>>m;
for(i=1; i<=n; i++)
{
in>>vv[i].a>>vv[i].b;
vec[++cnt]=vv[i].a;
}
for(i=1; i<=m; i++)
{
in>>v[i].t>>v[i].a>>v[i].b;
vec[++cnt]=v[i].a;
vec[++cnt]=v[i].b;
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;
for(i=1; i<=n; i++)
{
vv[i].a=val(vv[i].a);
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=val(v[i].a);
v[i].b=val(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=val(v[i].a);
v[i].b=val(v[i].b);
max1=0;
for(j=1; j<=64; j++)
max1=max(max1,ask(j,v[i].b)-ask(j,v[i].a-1));
out<<max1<<'\n';
}
}
/*for(i=1;i<=n;i++)
out<<vv[i].a<<" "<<vv[i].b<<'\n';
for(i=1;i<=m;i++)
out<<v[i].t<<" "<<v[i].a<<" "<<v[i].b<<'\n';*/
return 0;
}