Pagini recente » Cod sursa (job #1244000) | Cod sursa (job #2229788) | Cod sursa (job #1031055) | Cod sursa (job #1430500) | Cod sursa (job #1226500)
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#define x first
#define y second
#define NMAX 100007
#define CMAX 67
using namespace std;
vector < pair < int, int > > v;
int Sum[CMAX][NMAX];
int Maxc = 0, n, m;
int c[NMAX], Color[NMAX];
inline int cb(int val){
int st = 1, dr = n, med;
while(st <= dr){
int med = (st + dr) >> 1;
if(c[med] == val)
return med;
if(c[med] < val)
st = med + 1;
else
dr = med - 1;
}
return st;
}
int main(){
freopen("marbles.in", "r", stdin);
freopen("marbles.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; ++i){
int a, b;
scanf("%d %d", &a, &b);
v.push_back(make_pair(a, b));
Maxc = max(Maxc, b);
}
sort(v.begin(), v.end());
for(int i = 0; i < v.size(); ++i){
c[i + 1] = v[i].x;
Color[i + 1] = v[i].y;
}
for(int i = 1; i <= Maxc; ++i)
for(int j = 1; j <= n; ++j){
Sum[i][j] = Sum[i][j - 1];
if(Color[j] == i)
++Sum[i][j];
}
for(int i = 1; i <= m; ++i){
int a, b, Tip;
scanf("%d %d %d", &Tip, &a, &b);
if(Tip == 0){
int poz = cb(a);
c[poz] = a + b;
}
else{
int poz = cb(a);
int poz2 = cb(b), Ans = 0;
if(c[poz2] > b)
--poz2;
for(int j = 1; j <= Maxc; ++j)
Ans = max(Ans, Sum[j][poz2] - Sum[j][poz - 1]);
printf("%d\n", Ans);
}
}
return 0;
}