Language: C++

#include <bits/stdc++.h>

typedef long long int int64;
static const int64 mod = 1000000007LL;
using pair = std::pair<int64,int>;
int64 exgcd(int64 a,int64 b,int64 &c,int64 &d)
{
	if(b == 0) {
		c = 1,d = 0;
		return a;
	}
	int64 v = exgcd(b,a%b,d,c);
	d -= c * (a / b);
	return v;
}
int64 finv(int64 x)
{
	int64 a,b;
	exgcd(x,mod,a,b);
	return a < 0 ? a + mod : a;
}
pair operator *(const pair &a,const pair &b) {
	return pair(a.first*b.first%mod,a.second+b.second);
}
pair operator +(const pair &a,const pair &b) {
	if(a.second == b.second) {
		return pair(a.first*b.first%mod,a.second);
	} else if(a.second > b.second) {
		return a;
	} else {
		return b;
	}
}
 arr[200003];
void add(int i,pair p)
{
	while(i <= 200000) {
		arr[i] = arr[i] + p;
		i += i&-i;
	}
}
pair sum(int i)
{
	pair ans(1,0);
	while(i > 0) {
		ans = ans + arr[i];
		i -= i&-i;
	}
	return ans;
}
int n;
int a[200003];
int cnt[200003];
pair d[200003];
int main()
{
	scanf("%d",&n);
	for(int i = 0;i < n;++i) {
		scanf("%d",&a[i]);
		++cnt[a[i]];
	}
	for(int i = n-1;i >= 1;--i) {
		cnt[i] = cnt[i] + cnt[i+1] - 1;
		if(cnt[i] <= 0) {
			printf("0\n");
			return 0;
		}
	}
	for(int i = 0;i < n;++i) {
		pair cur,cur2;
		if(cnt[i] == 1) {
			cur = pair(1,1);
			cur2 = pair(1,-1);
		} else {
			cur = pair((int64)(cnt[i]-1)*finv(cnt[i])%mod,0);
			cur2 = pair((int64)cnt[i]*finv(cnt[i]-1)%mod,0);
		}
		if(i == 0) {
			d[i] = cur;
			d2[i] = cur2;
		} else {
			d[i] = d[i-1] * cur;
			d2[i] = d2[i-1] * cur2;
		}
	}
	int64 ans = 0;
	for(int i = 0,j = 0;i < n;i = j) {
		while(j < n && d[j].second == d[i].second) ++j;
		for(int k = i;k < j;++k) {
		}
		pair s = sum(a[i]);
		add(a[i],-d[i]);
	}
}


Compiler output:
a.cc:34:2: error: 'arr' does not name a type
   34 |  arr[200003];
      |  ^~~
a.cc: In function 'void add(int, pair)':
a.cc:38:17: error: 'arr' was not declared in this scope
   38 |                 arr[i] = arr[i] + p;
      |                 ^~~
a.cc: In function 'pair sum(int)':
a.cc:46:29: error: 'arr' was not declared in this scope
   46 |                 ans = ans + arr[i];
      |                             ^~~
a.cc: In function 'int main()':
a.cc:80:25: error: 'd2' was not declared in this scope; did you mean 'd'?
   80 |                         d2[i] = cur2;
      |                         ^~
      |                         d
a.cc:83:25: error: 'd2' was not declared in this scope; did you mean 'd'?
   83 |                         d2[i] = d2[i-1] * cur2;
      |                         ^~
      |                         d
a.cc:92:26: error: no match for 'operator-' (operand type is 'pair' {aka 'std::pair<long long int, int>'})
   92 |                 add(a[i],-d[i]);
      |                          ^~~~~
In file included from /usr/include/c++/14/bits/stl_algobase.h:67,
                 from /usr/include/c++/14/algorithm:60,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:51,
                 from a.cc:1:
/usr/include/c++/14/bits/stl_iterator.h:618:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr decltype ((__y.base() - __x.base())) std::operator-(const reverse_iterator<_Iterator>&, const reverse_iterator<_IteratorR>&)'
  618 |     operator-(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:618:5: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/14/bits/stl_iterator.h:1790:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr decltype ((__x.base() - __y.base())) std::operator-(const move_iterator<_IteratorL>&, const move_iterator<_IteratorR>&)'
 1790 |     operator-(const move_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:1790:5: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/14/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:127:
/usr/include/c++/14/complex:370:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const complex<_Tp>&, const complex<_Tp>&)'
  370 |     operator-(const complex<_Tp>& __x, const complex<_Tp>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/complex:370:5: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/14/complex:379:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const complex<_Tp>&, const _Tp&)'
  379 |     operator-(const complex<_Tp>& __x, const _Tp& __y)
      |     ^~~~~~~~
/usr/include/c++/14/complex:379:5: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/14/complex:388:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const _Tp&, const complex<_Tp>&)'
  388 |     operator-(const _Tp& __x, const complex<_Tp>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/complex:388:5: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/14/complex:465:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const complex<_Tp>&)'
  465 |     operator-(const complex<_Tp>& __x)
      |     ^~~~~~~~
/usr/include/c++/14/complex:465:5: note:   template argument deduction/substitution failed:
a.cc:92:30: note:   'pair' {aka 'std::pair<long long int, int>'} is not derived from 'const std::complex<_Tp>'
   92 |                 add(a[i],-d[i]);
      |                              ^
In file included from /usr/include/c++/14/valarray:605,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:166:
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom1, class _Dom2> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Expr, std::_Expr, _Dom1, _Dom2>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const _Expr<_Dom1, typename _Dom1::value_type>&, const _Expr<_Dom2, typename _Dom2::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Expr, std::_Constant, _Dom, typename _Dom::value_type>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const _Expr<_Dom1, typename _Dom1::value_type>&, const typename _Dom::value_type&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Constant, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const typename _Dom::value_type&, const _Expr<_Dom1, typename _Dom1::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Expr, std::_ValArray, _Dom, typename _Dom::value_type>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const _Expr<_Dom1, typename _Dom1::value_type>&, const valarray<typename _Dom::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_ValArray, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const valarray<typename _Dom::value_type>&, const _Expr<_Dom1, typename _Dom1::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/14/valarray:1197:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__minus, std::_ValArray, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__minus, _Tp>::result_type> std::operator-(const valarray<_Tp>&, const valarray<_Tp>&)'
 1197 | _DEFINE_BINARY_OPERATOR(-, __minus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/valarray:1197:1: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/14/valarray:1197:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__minus, std::_ValArray, std::_Constant, _Tp, _Tp>, typename std::__fun<std::__minus, _Tp>::result_type> std::operator-(const valarray<_Tp>&, const typename valarray<_Tp>::value_type&)'
 1197 | _DEFINE_BINARY_OPERATOR(-, __minus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/valarray:1197:1: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/14/valarray:1197:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Constant, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__minus, _Tp>::result_type> std::operator-(const typename valarray<_Tp>::value_type&, const valarray<_Tp>&)'
 1197 | _DEFINE_BINARY_OPERATOR(-, __minus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/valarray:1197:1: note:   candidate expects 2 arguments, 1 provided