#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
using namespace std;
int n;
struct node
{
int pre=0,nxt=0;
int val,cnt=0;
}itm[200005];
int cnt;
struct node1
{
int cnt;
int id;
friend bool operator<(node1 a,node1 b)
{
if(a.cnt==b.cnt)
return a.id>b.id;
else
return a.cnt<b.cnt;
}
};
int main()
{
while(~scanf("%d",&n))
{
cnt=0;
priority_queue<node1> q;
for(int i=0;i<n;i++)
{
int tp;
scanf("%d",&tp);
if(i==0)
{
itm[++cnt].val=tp;
itm[cnt].cnt=1;
} else
{
if(tp==itm[cnt].val)
{
itm[cnt].cnt++;
} else
{
itm[++cnt].val=tp;
itm[cnt].cnt=1;
}
}
}
for(int i=1;i<=cnt;i++)
{
itm[i].pre=itm[i].nxt=0;
if(i!=cnt)
itm[i].nxt=i+1;
if(i!=1)
itm[i].pre=i-1;
node1 tp;
tp.cnt=itm[i].cnt;
tp.id=i;
q.push(tp);
}
int ans=0;
while(!q.empty())
{
node1 cur=q.top();
q.pop();
if(cur.cnt==itm[cur.id].cnt)
{
ans++;
int tid=cur.id;
itm[tid].cnt=0;
if(!(itm[tid].pre==0 && itm[tid].nxt==0))
{
if(itm[tid].pre==0)
{
itm[itm[tid].nxt].pre=0;
}
else if(itm[tid].nxt==0)
{
itm[itm[tid].pre].nxt=0;
}
else
{
int pre=itm[tid].pre;
int nxt=itm[tid].nxt;
if(itm[pre].val==itm[nxt].val)
{
itm[pre].cnt+=itm[nxt].cnt;
itm[pre].nxt=itm[nxt].nxt;
if(itm[nxt].nxt!=0)
itm[itm[nxt].nxt].pre=pre;
itm[nxt].cnt=0;
node1 nd;
nd.id=pre;
nd.cnt=itm[pre].cnt;
q.push(nd);
}
else
{
itm[pre].nxt=nxt;
itm[nxt].pre=pre;
}
}
}
}
}
printf("%d\n",ans);
}
}