Cod sursa(job #317366)

Utilizator drag0s93Mandu Dragos drag0s93 Data 23 mai 2009 13:51:23
Problema Marbles Scor 50
Compilator cpp Status done
Runda Pregatire clasa a 9a Marime 1.53 kb
#include<cstdio>
#include<vector>
#include<algorithm>
#include<stdlib.h>

using namespace std;

#define IN "marbles.in","r",stdin
#define OUT "marbles.out","w",stdout
#define PII pair<int,int>
#define x first
#define y second
#define Nmax 100020

int N , M;
PII V[Nmax];
int F[100];
/*
int cmp(const void *p, const void *q)
{
	PII x = *(PII*)p, y = *(PII*)q;
	if(x.x > y.x)	return 1;
	if(x.x < y.x)	return -1;
	return 0;
}*/

int main()
{
	freopen(IN);
	freopen(OUT);
	scanf("%d%d",&N,&M);
	for(int i = 1 ; i <= N ; ++i)	scanf("%d%d",&V[i].x,&V[i].y);
	//sort(V + 1 , V + 1 + N , cmp);
	//qsort(V + 1 , N , sizeof(V[0]) , cmp);
	//for(int i = 1 ; i <= N ; ++i)	printf("%d %d\n",V[i].x,V[i].y);
	int intr , X , Y ;
	for(int i = 1 ; i <= M ; ++i)
	{
		scanf("%d%d%d",&intr,&X,&Y);
		if(intr == 1){
			int max = -20000000;
			for(int j = 1 ; j <= N ; ++j)
				if(V[j].x >= X && V[j].x <= Y)	{
					if(V[j].y > max)	max = V[j].y;
					++F[V[j].y];
				}
			int maxi = max;
			max  = -200000000;
			for(int p = 1 ; p <= maxi ; ++p)
				if(max < F[p])	max = F[p];
			printf("%d\n",max);
			for(int t = 1 ; t <= maxi ; ++t)	F[t] = 0;
		}
		else {
			int poz = -2000;
			int aux;
			int pozi;
			for(int j = 1 ; j <= N ; ++j){
				if(V[j].x == X + Y)	poz = j;
				if(V[j].x == X) pozi = j;
			}
			if(poz == - 2000){
				V[pozi].x = X + Y;
				continue;
			}
			aux = V[X].x;
			V[X].x = V[X + Y].x;
			V[X + Y].x = aux;
			aux = V[X].y;
			V[X].y = V[X + Y].y;
			V[X + Y].y = aux;
		}
	}
	return 0;
}