#include <bits/stdc++.h>
const long long kot = LLONG_MAX;
using kk = long double;
const long long int alpha = 1e18;
using namespace std;
int gcd(long long int a, long long int b) {
  if (a == 0) return b;
  if (b == 0) return a;
  if (a == b) return a;
  if (a > b) return gcd(a - b, b);
  return gcd(a, b - a);
}
int largest(long long int arr[], long long int n) {
  return *max_element(arr, arr + n);
}
long long int lcm(long long int a, long long int b) {
  return (a * b) / gcd(a, b);
}
void sieve(bool primes[], int x) {
  primes[1] = false;
  for (int i = 2; i * i <= x; i++) {
    if (primes[i] == true) {
      for (int j = 2; j * i <= x; j++) primes[i * j] = false;
    }
  }
}
long long int power(long long int x, unsigned long long int y,
                    long long int p) {
  long long int res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
class gfg {
 public:
  int sumDigits(int no) { return no == 0 ? 0 : no % 10 + sumDigits(no / 10); }
};
bool isPerfectSquare(long double x) {
  long double sr = sqrt(x);
  return ((sr - floor(sr)) == 0);
}
bool comp(int a, int b) { return (a < b); }
vector<long long int> ve;
void divisors(long long int n) {
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      if (n / i == i)
        ve.emplace_back(i);
      else
        ve.emplace_back(i);
      ve.emplace_back(n / i);
    }
  }
}
bool isPrime(long long int n) {
  if (n == 1) {
    return false;
  }
  long long int i = 2;
  while (i * i <= n) {
    if (n % i == 0) {
      return false;
    }
    i += 1;
  }
  return true;
}
int gcdofarray(long long int v[], long long int n) {
  long long int result = v[0];
  for (long long int i = 1; i < n; i++) result = gcd(v[i], result);
  return result;
}
int sumofdigits(long long int n) {
  long long int sum = 0;
  while (n > 0) {
    sum += n % 10;
    n /= 10;
  }
  return sum;
}
bool powertwo(long long int x) { return x && (!(x & (x - 1))); }
long long int finduncommonsubsequence(string str, string s) {
  if (!str.compare(s)) {
    return 0;
  }
  return max(str.length(), s.length());
}
void reversec(string str) {
  for (long long int i = str.length() - 1; i >= 0; i--) cout << str[i];
}
long long int subCount(long long int arr[], long long int n, long long int k) {
  long long int mod[k];
  memset(mod, 0, sizeof(mod));
  long long int cumSum = 0;
  for (long long int i = 0; i < n; i++) {
    cumSum *= arr[i];
    mod[((cumSum % k) + k) % k]++;
  }
  long long int result = 0;
  for (long long int i = 0; i < k; i++)
    if (mod[i] > 1) result += (mod[i] * (mod[i] - 1)) / 2;
  result += mod[0];
  return result;
}
void solve() {
  long long int t = 1;
  while (t--) {
    long long int n;
    cin >> n;
    long long int arr[n];
    long long int i, sum = 0;
    for (i = 0; i < n; i++) {
      cin >> arr[i];
      sum += arr[i];
    }
    long long int j = 0, k = 0;
    while (j < n) {
      if (j % 2 == 0) {
        k += arr[j] / 2;
      } else {
        k += arr[j] - arr[j] / 2;
      }
      j++;
    }
    cout << min(k, sum - k) << "\n";
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ;
  solve();
}
