#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
int podzial(vector<int>&T,int l, int p)
{
int x=T[l];
while(true)
{
while(T[l]<x)
l++;
while(T[p]>x)
p--;
if(l<p)
swap(T[l++],T[p--]);
else
return p;
}
}
void quickSort(vector<int>&T,int l, int p)
{
if(l<p)
{
int q=podzial(T,l,p);
quickSort(T,l,q);
quickSort(T,q+1,p);
}
}
int main ()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,i,x,y;
cin>>n;
vector<int>T(n);
for(i=0;i<n;i++)
cin>>T[i];
quickSort(T,0,n-1);
for(i=1;i<n;i++)
{
x=0;
y=T[i];
while(i<n && y==T[i-1] && y==T[i])
{
x++;
T.erase(T.begin()+i-1,T.begin()+i+1);
n-=2;
}
if(x>0)
{
if(T[i-1]>y)
i--;
else if(i>n)
i=n;
T.insert(T.begin()+i,x,++y);
n+=x;
}
}
cout<<T[i-1];
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include<iostream> #include<cmath> #include<vector> using namespace std; int podzial(vector<int>&T,int l, int p) { int x=T[l]; while(true) { while(T[l]<x) l++; while(T[p]>x) p--; if(l<p) swap(T[l++],T[p--]); else return p; } } void quickSort(vector<int>&T,int l, int p) { if(l<p) { int q=podzial(T,l,p); quickSort(T,l,q); quickSort(T,q+1,p); } } int main () { ios_base::sync_with_stdio(0); cin.tie(0); int n,i,x,y; cin>>n; vector<int>T(n); for(i=0;i<n;i++) cin>>T[i]; quickSort(T,0,n-1); for(i=1;i<n;i++) { x=0; y=T[i]; while(i<n && y==T[i-1] && y==T[i]) { x++; T.erase(T.begin()+i-1,T.begin()+i+1); n-=2; } if(x>0) { if(T[i-1]>y) i--; else if(i>n) i=n; T.insert(T.begin()+i,x,++y); n+=x; } } cout<<T[i-1]; return 0; } |
English