Pagini recente » Cod sursa (job #2666780) | Cod sursa (job #1936264) | Cod sursa (job #2719466) | Cod sursa (job #2967745) | Cod sursa (job #1510562)
#include <cstdio>
#include <algorithm>
#define nmax 100005
#define cmax 65
using namespace std;
struct nod{
int l,c[cmax];
} v[nmax];
int n,m;
struct nod2{
int x;int y;
} a[nmax];
int binarylow(int k)
{
int sol=0;
for (int bit=1<<16;bit;bit>>=1)
if (sol+bit<=n&&v[sol+bit].l<k)
sol+=bit;
return sol+1;
}
int binaryhigh(int k)
{
int sol=0;
for (int bit=1<<16;bit;bit>>=1)
if (sol+bit<=n&&v[sol+bit].l<=k)
sol+=bit;
return sol;
}
bool cmp(const nod2 &a,const nod2 &b)
{
return a.x<b.x;
}
class instream {
public:
instream() {}
instream(const char *file_name) {
input_file=fopen(file_name,"r");
cursor=0;
fread(buffer,SIZE,1,input_file);
}
inline instream &operator >>(int &n) {
while((buffer[cursor]<'0'||buffer[cursor]>'9')&&buffer[cursor]!='-') {
advance();
}
int semn=1;
if (buffer[cursor]=='-')
semn=-1,advance();
n=0;
while('0'<=buffer[cursor]&&buffer[cursor]<='9') {
n=n*10+buffer[cursor]-'0';
advance();
}
n*=semn;
return *this;
}
private:
FILE *input_file;
static const int SIZE=1<<15;
int cursor;
char buffer[SIZE];
inline void advance() {
++ cursor;
if(cursor==SIZE) {
cursor=0;
fread(buffer,SIZE,1,input_file);
}
}
};
instream f("marbles.in");
int main()
{
freopen("marbles.out","w",stdout);
f>>n;f>>m;
int i,j,k,t,sol,op;
for (i=1;i<=n;i++) {
f>>a[i].x;
f>>a[i].y;
}
sort(a+1,a+n+1,cmp);
for (i=1;i<=n;i++) {
v[i].l=a[i].x;
for (j=1;j<cmax;j++)
v[i].c[j]=v[i-1].c[j];
v[i].c[a[i].y]++;
}
for (i=1;i<=m;i++) {
f>>op;f>>j;f>>k;
if (op==0) {
j=binaryhigh(j);
v[j].l+=k;
}
else {
sol=0;
if (j>k) {
printf("0\n");
continue;
}
j=binarylow(j);
k=binaryhigh(k);
if (j>k) {
printf("0\n");
continue;
}
for (t=1;t<cmax;t++)
sol=max(sol,v[k].c[t]-v[j-1].c[t]);
printf("%d\n",sol);
}
}
return 0;
}