Pagini recente » Monitorul de evaluare | Cod sursa (job #916464) | Cod sursa (job #1117949) | Profil GabrielaGrosu | Cod sursa (job #972676)
Cod sursa(job #972676)
#include<fstream>
#include<algorithm>
#define max_n 100010
using namespace std;
ifstream f("marbles.in");
ofstream g("marbles.out");
int n , m , num_c;
int V[65][max_n];
struct bila{
int p , c;
};
bila B[max_n];
void read(){
f>>n>>m;
for( int i = 1 ; i <= n ; i++ ){
f>>B[i].p>>B[i].c;
if(B[i].c > num_c) num_c = B[i].c;
}
}
int search( int v ){
int i , s;
for( s = 1 ; s < n ; s <<= 1 );
for( i = 0 ; s ; s >>= 1 )
if( i + s < n && B[i+s].p <= v )
i += s;
return i;
}
void solve(){
int op , a , b , nr , ind , ind1 , ind2 , maxim;
for( int i = 1 ; i <= m ; i++ ){
f>>op>>a>>b;
switch( op ){
case 0:
ind = search(a);
B[ind].p += b;
break;
case 1:
ind1 = search(a);
ind2 = search(b);
maxim = -1;
for( int j = 1 ; j <= num_c ; j++ ){
nr = V[j][ind2] - V[j][ind1];
if( B[ind1].p == a && j == B[ind1].c )
nr++;
if( nr > maxim )
maxim = nr;
}
g<<maxim<<"\n";
break;
}
}
}
int cmp( bila a , bila b ){
return a.p < b.p;
}
int main(){
read();
sort( B+1 , B+n+1 , cmp );
for( int j , i = 1 ; i <= num_c ; i++ )
for( j = 1 ; j <= n ; j++ ){
V[i][j] = V[i][j-1];
if( B[j].c == i ) V[i][j]++;
}
solve();
return 0;
}