Pagini recente » Cod sursa (job #2968502) | Cod sursa (job #1175269) | Cod sursa (job #191464) | Cod sursa (job #1925174) | Cod sursa (job #1412974)
//deci daca iau peste 50 pe asta dau de baut
#include <algorithm>
#include <fstream>
#include <cstdio>
using namespace std;
int a[100010][70], ics[100010],n,m,pp,ma=0,i,j,x,y,z,sol,in,preotu,jakub,reus,ginter;
struct borcanu{int x, y;}v[100010];
bool parfumat_si_par_fumat(borcanu x, borcanu y){
return x.x<y.x;}
int main() {
freopen("marbles.in","r",stdin);
ofstream g("marbles.out");
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
scanf("%d%d",&v[i].x,&v[i].y);
sort(v+1,v+n+1,parfumat_si_par_fumat);
for(i=1;i<=n;++i){
ics[i]=v[i].x;
for(j=1;j<=64;++j)a[i][j]=a[i-1][j];
a[i][v[i].y]++;}
for(pp=1;pp<=n/2;pp*=2);
for(in=1;in<=m;++in){
scanf("%d%d%d",&x,&y,&z);
if(x==0){
sol=0;
preotu=pp;
while(preotu){
if(sol+preotu<=n&&ics[sol+preotu]<=y)sol+=preotu;
preotu/=2;}
ics[sol]+=z;}
else{
reus=n,ginter=0;
jakub=pp;
while(jakub){
if(reus-jakub>=1&&ics[reus-jakub]>=y)reus-=jakub;
if(ginter+jakub<=n&&ics[ginter+jakub]<=z)ginter+=jakub;
jakub/=2;}
ma=0;
for(i=1;i<=64;++i)ma=max(ma,a[ginter][i]-a[reus-1][i]);
if (ics[reus]<y||ics[ginter]>z)ma=0;
g<<ma<<'\n';}}
return 0;}