Cod sursa(job #1877048)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 12 februarie 2017 21:13:56
Problema Marbles Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.18 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("marbles.in");
ofstream out("marbles.out");
int i,x,y,m,n,w[65],v[65][10001],a,b,st,dr,mid,z,t,j,maxim,d;
int main(){
    in>>n>>m;
    for( i = 1; i <= n; i ++ ){
        in >> x;
        in >> y;
        w[y]++;
        v[ y ][ w[y] ]=x;
    }
    for(i=1;i<=64;i++){
        sort(v[i]+1,v[i]+w[i]+1);
        }
    for( j = 1; j <= m; j ++ ){
        in >> t >> a >> b;
        maxim=0;
            if( t == 0 ){
                for(i=1;i<=64;i++){
                    st=1;
                    dr=w[i];
                    while(st<=dr){
                        mid=(st+dr)/2;
                        if(v[i][mid] == a){
                            z=mid;
                            break;
                        }
                        if( v[i][mid] < a){
                            st=mid+1;

                        }
                        else{
                            dr=mid-1;
                        }
                    }
                    if(v[i][z] == a){
                        v[i][z]=b;
                        break;
                    }

                }


            }
            if( t == 1 ){
                for(i=1;i<=64;i++){
                    st=1; dr=w[i];
                    while( st <= dr ){
                        mid=(st+dr)/2;

                        if(v[i][mid]<a){
                            st=mid+1;
                        }
                        else{
                            dr=mid-1;
                        }
                    }
                    x=st;
                    st=1; dr=w[i];
                    while( st <= dr ){
                        mid=(st+dr)/2;

                        if(v[i][mid]<=b){
                            st=mid+1;
                        }
                        else{
                            dr=mid-1;
                        }
                    }
                    y=dr;

                d=y-x+1;
                if(d>maxim){
                    maxim=d;
                }
            }
            out<<maxim<<"\n";
            }
    }



return 0;
}