Pagini recente » Cod sursa (job #2250690) | Cod sursa (job #2595651) | Cod sursa (job #2306771) | Cod sursa (job #1671376) | Cod sursa (job #1167007)
#include<fstream>
#include<algorithm>
using namespace std;
int n, m, maxim, p, u, mid, x, y, i, k, z, j, poz1, poz2;
int a[65][100001];
pair<int , int> v[100001];
ifstream fin("marbles.in");
ofstream fout("marbles.out");
int main(){
fin>> n >> m;
for(i = 1; i <= n; i++){
fin>> v[i].first >> v[i].second;
for(j = 1; j <= 64; j++){
if(j == v[i].second){
a[j][i] = a[j][i-1] + 1;
}
else{
a[j][i] = a[j][i-1];
}
}
}
sort(v + 1, v + n + 1);
for(k = 1; k <= m; k++){
fin>> x >> y >> z;
if(x == 0){
p = 1;
u = n;
while(p <= u){
mid = (p + u) / 2;
if(v[mid].first == y){
break;
}
else{
if(v[mid].first > y){
u = mid - 1;
}
else{
p = mid + 1;
}
}
}
v[mid].first += z;
}
else{
if(v[n].first <= y){
poz1 = n;
}
else{
p = 1;
u = n;
while(p <= u){
mid = (p + u) / 2;
if(v[mid].first >= y){
if(v[mid - 1].first < y){
poz1 = mid;
break;
}
else{
u = mid - 1;
}
}
else{
p = mid + 1;
}
}
}
p = 1;
u = n;
if(v[n].first <= z){
poz2 = n;
}
else {
while(p <= u){
mid = (p + u) / 2;
if(v[mid].first <= z){
if(v[mid + 1].first > z){
poz2 = mid;
break;
}
else{
p = mid + 1;
}
}
else{
u = mid - 1;
}
}
}
maxim = 0;
for(i = 1; i <= 64; i++){
if(a[i][poz2] - a[i][poz1-1] > maxim){
maxim = a[i][poz2] - a[i][poz1-1];
}
}
fout<< maxim <<"\n";
}
}
return 0;
}