あり nは n個のボクサーの重量 I i番目のボクサーがある 私 aiが。それらのそれぞれは超えないで重量を変更することができます 1(重量がゼロに等しくなることができない、つまり、それは正のままでなければならない)競技の前に1。重量は常に整数です。
チーム内のすべてのボクサーの重みが異なる(すなわちユニーク)であることを、人々の数の面で最大のボクシングチームを選択することが必要です。
与えられた電流値のためのプログラム書く私は AIがチームのボクサーの最大可能な数がありますが。
いくつかの変更後に、いくつかのボクサーの重量があるないことがある 150001 150001(しかし、それ以上)。
最初の行は、整数含ま N、N(1 ≤ N ≤ 150000ボクサーの数- 1≤n≤150000)。次の行が含まれ 、N nは整数 1 、2 、... 、n個の A1、A2、...、 iは Al(1 ≤ iは≤ 150000 1≤ai≤150000が)の重量であり、 I I-第ボクサー。
チームの人々の可能な最大数 - 単一の整数を出力します。
4
3 2 4 1
4
6
1 1 1 4 4 4
5
最初の例では、ボクサーは、その重みを変更しないでください - あなたはそれらのすべての外にチームを作ることができます。
第2の例では、の重量を有するものボクサー 1 1 1(重量得ることによって増大させることができる 2 2)の重量を有するものボクサー 4 4は、いずれかによって低減することができ、他方は(1だけ増加させることができます重量とボクサーを得 3 3及び 5)は、それぞれ、5。したがって、あなたはの重みでボクサーからなるチームが得ることができます 5 、4 、3 、2 、1 5,4,3,2,1を。
#include <ビット/ STDC ++。H> の#include <iostreamの> する#include <アルゴリズム> の#include <cstdioを> する#include < ストリング > の#include <CStringの> する#include <cstdlib> の#include <地図> の#include <ベクトル> #含める < セット > の#include <キュー> の#include <スタック> の#include <cmath> typedefの長い 長いLL。 使用して 名前空間はstdを、 const int型 INT = 1E6 + 5 。 LSONのRT << 1、L、M の#define rsonのRT << 1 | 1、M + 1、R用 の#define読み取る(X)のscanf( "%dの"、およびX) の#define LREAD(X)のscanf( "%のLLD "、&バツ); #define PT(X)のprintf( "%d個の\ n"、(X)) の#define CN CIN >> の#define CT COUT << の#define EN << ENDL の#define担当者(J、K)のための式(I = int型(INT)〜(j)は、iが<=(INT)(K); iは++) の#define入力(k)はのために(INT i = 1; iは=(INT <)(K); iが++){CIN >> [私] ; } の#define MEM(S、T)のmemset(S、T、はsizeof(S)) の#define戻り0再。 #define TLEのstd ::イオス:: sync_with_stdio(偽); cin.tie(NULL); cout.tie(NULL); BOOL VIS [ 151000 ]。 INT メイン() { TLE。 int型のn; scanf関数(" %のD "、&N) 以下のために(int型 I = 1(のscanf ++ I; iは= N <)" は%d "、&[I])。 ソート( + 1、A + 1個の + N)。 int型の合計= 0 ; 以下のために(int型 i = 1 ; iは= N <; ++ I){ もし!(VIS [I] - 1!] && [I] =1){VIS [[I] - 1 ] = 真。合計++; 続け; } もし(!VIS [I]]){VIS [[I] = 真。合計++; 続け; } 場合(VIS [[I] +!1 {VIS [[I] +])1 ] = 真。合計++; 続け; } } COUT <<和<< ENDL。 リターン 0 ; }