Cod sursa(job #1167061)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 4 aprilie 2014 12:12:20
Problema Marbles Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.99 kb
#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;
    }
    sort(v + 1, v + n + 1);
    for(i = 1; i <= n; i++){
    	 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];
            }
        }
    }
    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{
            p = 1;
            u = n;
            while(p <= u){
            	mid = (p + u) / 2;
            	if(v[mid].first >= y){
            		u = mid - 1;
            	}
            	else{
            		p = mid + 1;
            	}
            }
            poz1 = p;
            p = 1;
            u = n;
            while(p <= u){
            	mid = (p + u) / 2;
            	if(v[mid].first <= z){
            		p = mid + 1;
            	}
            	else{
            		u = mid - 1;
            	}
            }
            poz2 = u;
            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;
}