Cod sursa(job #1182969)

Utilizator PopescuMihai95Popescu Mihai PopescuMihai95 Data 8 mai 2014 08:48:56
Problema Marbles Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,i,j,p,q,r,nr,m,k,l,s,maxx,i1;
int a[65][100005];
struct nod
{
    int x;
    int y;
}v[100005];
int cmp(const nod a,const nod b)
{
    return a.x<b.x;
}
int w[100005];
int main()
{
    freopen("marbles.in","r",stdin);
    freopen("marbles.out","w",stdout);
    scanf("%d %d",&n,&m);
    for (i=1;i<=n;i++)
    {
        scanf("%d %d",&v[i].x,&v[i].y); a[v[i].y][i]=1;

    }
    sort(v+1,v+n+1,cmp);
    for (i=1;i<=n;i++) for (j=1;j<=64;j++) {w[i]=v[i].x; a[j][i]=a[j][i-1]; if (v[i].y==j) a[j][i]++;}
    for (i1=1;i1<=m;i1++)
    {
        scanf("%d %d %d",&r,&p,&q);
        if (r==0)
        {
            k=(upper_bound(w+1,w+n+1,p)-w-1);
            if (v[k].x!=p) continue;
            w[k]=p+q;
        }
        else
        {
            maxx=0;
            k=(upper_bound(w+1,w+n+1,p)-w-1); if (w[k]==p) --k;
            l=(upper_bound(w+1,w+n+1,q)-w-1);
            for (i=1;i<=64;i++) maxx=max(maxx,(a[i][l]-a[i][k]));
            printf("%d\n",maxx);
        }
    }
    return 0;
}