Pagini recente » Cod sursa (job #2881444) | Cod sursa (job #2040708) | Monitorul de evaluare | Cod sursa (job #183417) | Cod sursa (job #1787645)
#include <cstdio>
#include <vector>
#include <algorithm>
#define f first
#define s second
using namespace std;
int tip, n, m, x, c;
int i1, i2;
int f[65];
vector<pair <int, int> > v;
inline int CBIN1(int i3){
int st = 0, dr = m - 1, Sol = -1;
while(st <= dr){
int mid = (st + dr) / 2;
if(v[mid].f > i3)
dr = mid - 1;
if(v[mid].f < i3){
st = mid + 1;
if(st > Sol)
Sol = st;
}
if(v[mid].f == i3){
Sol = mid;
dr = mid - 1;
}
}
return Sol;
}
inline int CBIN2(int i3){
int st = 0, dr = m - 1, Sol = -1;
while(st <= dr){
int mid = (st + dr) / 2;
if(v[mid].f > i3)
dr = mid - 1;
if(v[mid].f < i3){
st = mid + 1;
if(st > Sol)
Sol = st;
}
if(v[mid].f == i3){
Sol = mid;
st = mid + 1;
}
}
return Sol;
}
int main()
{
freopen("marbles.in", "r", stdin);
freopen("marbles.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= n ; ++i){
scanf("%d%d", &x, &c);
v.push_back(make_pair(x, c));
}
sort(v.begin(), v.end());
for(int i = 1; i <= m ; ++i){
scanf("%d%d%d", &tip, &i1, &i2);
if(tip == 0){
int P = CBIN1(i1);
v[P].f = v[P].f + i2;
continue ;
}
int P1 = CBIN1(i1), P2 = CBIN2(i2);
int Sol = 0;
for(int j = P1; j <= P2 ; ++j){
++f[v[j].s];
if(Sol < f[v[j].s])
Sol = f[v[j].s];
}
printf("%d\n", Sol);
for(int j = P1; j <= P2 ; ++j)
f[v[j].s] = 0;
}
return 0;
}