Pagini recente » Cod sursa (job #1072648) | Cod sursa (job #2017444) | Cod sursa (job #848829) | Cod sursa (job #173683) | Cod sursa (job #555750)
Cod sursa(job #555750)
#include <stdio.h>
#include <algorithm>
#define N 100101
using namespace std;
typedef struct {long long cord,cul;} BILA;
BILA A[N];
long long S[65][N];
long long n,m,cod,a,b,rez;
FILE *f, *g;
bool operator < (const BILA &a, const BILA &b)
{
if (a.cord<=b.cord)
return 1;
else
return 0;
}
void citire()
{
int i,j,p;
fscanf(f,"%lld %lld",&n,&m);
for (i=1;i<=n;++i)
fscanf(f,"%lld %lld",&A[i].cord,&A[i].cul);
sort(A+1,A+n+1);
for (i=1;i<=n;++i)
{
p=A[i].cul;
S[p][i]=S[p][i-1]+1;
for (j=1;j<=64;++j)
if (j!=p)
S[j][i]=S[j][i-1];
}
}
int caut_bin(long long x)
{
int st,dr,mij;
st=1;
dr=n;
while (st<=dr)
{
mij=(st+dr)/2;
if (A[mij].cord<=x)
st=mij+1;
else
dr=mij-1;
}
if (A[dr].cord<x)
dr++;
return dr;
}
void solve()
{
int i,q,z,j;
for (i=1;i<=m;++i)
{
fscanf(f,"%lld %lld %lld",&cod,&a,&b);
if (!cod)
{
q=caut_bin(a);
A[q].cord+=b;
}
else
{
q=caut_bin(a);
z=caut_bin(b);
rez=0;
for (j=1;j<=64;++j)
if (S[j][z]-S[j][q-1]>rez)
rez=S[j][z]-S[j][q-1];
fprintf(g,"%lld\n",rez);
}
}
}
int main()
{
f=fopen("marbles.in","r");
g=fopen("marbles.out","w");
citire();
solve();
fclose(f);
fclose(g);
return 0;
}