Pagini recente » Cod sursa (job #262082) | Cod sursa (job #3179090) | Cod sursa (job #2693748) | Cod sursa (job #2822465) | Cod sursa (job #1390493)
#include <fstream>
using namespace std;
ifstream fin("marbles.in");
ofstream fout("marbles.out");
const int nmax= 100000;
const int cmax= 64;
int s[nmax+1][cmax+1], p[nmax+1];
int main( ) {
int n, q;
fin>>n>>q;
for ( int i= 1; i<=n; ++i ) {
int a, b;
fin>>a>>b;
p[i]= a;
for ( int j= 1; j<=cmax; ++j ) {
s[i][j]= s[i-1][j];
}
++s[i][b];
}
int n2;
for ( n2= 1; 2*n2<=n; n2*=2 ) ;
for ( int cnt= 1; cnt<=q; ++cnt ) {
int x, y, z;
fin>>x>>y>>z;
if ( x==0 ) {
int sol= 0;
for ( int step= n2; step>0; step/= 2 ) {
if ( sol+step<=n && p[sol+step]<=y ) {
sol+= step;
}
}
p[sol]+= z;
} else {
int a= n, b= 0;
for ( int step= n2; step>0; step/= 2 ) {
if ( a-step>=1 && p[a-step]>=y ) {
a-= step;
}
if ( b+step<=n && p[b+step]<=z ) {
b+= step;
}
}
int maxim= 0;
for ( int i= 1; i<=cmax; ++i ) {
maxim= max(maxim, s[b][i]-s[a-1][i]);
}
if ( p[a]<y || p[b]>z ) maxim= 0;
fout<<maxim<<"\n";
}
}
return 0;
}