Problem p02691 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <bits/stdc++.h>
using namespace std;
#define mem(a, b) memset(a, b, sizeof a);
#define vi vector<int>
#define vit vector<int>::iterator
#define all(ans) ans.begin(), ans.end()
#define sz(a) int(a.size())
#define ub upper_bound
#define lb lower_bound
#define create(Name, N, M, val) vector<vector<int>> Name(N, vector<int>(M, val))
#define ull unsigned long long
#define ll long long
#define db double
#define ldb long double
#define fl float
#define rep(i, a, b) for (int i = a; i < b; i++)
#define lrep(i, a, b) for (ll i = a; i < b; i++)
// #define all(c) c.begin(),c.end()
#define tr(c, it) for (typeof(c.begin()) it = c.begin(); it != c.end(); it++)
#define mpr make_pair
#define pb push_back
#define fr first
#define sn second
#define bpp(x) __builtin_popcountll(x)
const ldb PI =
    3.14159265358979323846264338327950288419716939937510582097494459230781640628620899863;
const long long INF = 1e9 + 7;
/*
bool ok(string &s ,int l ,int r)
{
while(s[l]==s[r]) l++,r--;
return l>=r;
}
int prime[]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,
67, 71, 73, 79, 83, 89,97,101,103}; int add(int a,int b) // integer range
{
long x=a+b;
if(x>=INF)
x-=INF;
return x;
}
int gcd(int a, int b)
{
while(b)
{
a%=b;
swap(a,b);
}
return a;
}
ll pw(ll a,int b)
{
ll res=1;
while(b)
{
if(b&1) res=(res*a)%998244353;
a=(a*a)%998244353;
b>>=1;
}
return res;
}
bool isFib(int n)
{
int x,y;
x=sqrt(5*n*n+4); y=sqrt(5*n*n-4);
return ((x*x)==(5*n*n+4))||((y*y)==(5*n*n-4));
}
int ExtU(int a,int b,int &x,int &y)
{
if(a==0)
{
x=0; y=1; return b;
}
int x1,y1;
int d=ExtU(b%a,a,x1,y1);
x=y1-(b/a)*x1;
y=x1;
return d;
}
int factors(int n)
{
int ct=0;
for(int i=1;i*i<=n;i++)
{
if(n%i==0)
{
if(i*i==n)
ct++;
else
ct+=2;
}
return ct;
}
}
vector<int>factorize(int n)
{
vi ans;
while(n%2==0)
{
ans.pb(2); n/=2;
}
for(int i=3;i<=sqrt(n);i+=2)
{
while(n%i==0)
{
ans.pb(i); n/=i;
}
}
if(n>2)
ans.pb(n);
return ans;
}
int mnpr[500003]={0};
void sprime(int n)
{
for(int i=2;i*i<=n;i++)
{
if(mnpr[i]==0)
{
for(int j=i*i;j<=n;j+=i)
{
if(mnpr[j]==0)
mnpr[j]=i;
}
}
}
for(int i=1;i<=n;i++)
if(mnpr[i]==0)
mnpr[i]=i;
}
int mxpr(int n)
{
int mx;
while(n&1==0)
{
mx=2; n>>=1;
}
for(int i=3;i*i<=n;i+=2)
{
while(n%i==0)
{
mx=i; n/=i;
}
}
if(n>2)
mx=n;
return mx;
}
bool seg[100005]={true};
void ss(int r,int l)
{
rep(i,0,r-l+2)
seg[i]=true;
for(int i=2;i*i<=r;i++)
{
for(int j=max(i*i,((l+i-1)/i)*i);j<=r;j+=i)
seg[j-l]=false;
}
}
int phi(int n)
{
int res=n;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
while(n%i==0)
n/=i;
res-=res/i;
}
}
if(n>1)
res-=res/n;
return res;
}
int ncr(int n,int r)
{
int C[r+1];
mem(C,0);
C[0]=1;
for(int i=1;i<=n;i++)
{
for(int j=min(i,r);j;j--)
{
C[j]=(C[j]+C[j-1])%INF;
}
}
return C[r];
}
int bitzero(int n)
{
int ct=0;
while(n)
{
ct+=!(n&1);
n>>=1;
}
return ct;
}
string twocom(string &s)
{
int i;
for(i=s.length()-1;i>=0;i--)
if(s[i]=='1')
break;
if(i==-1)
{
return '1'+s;
}
for(int k=i-1;k>=0;k--)
{
if(s[k]=='1')
s[k]='0';
else
s[k]='1';
}
return s;
}
goto e;

e:
;
ll sum(ll l,ll r)
{
return (l+r)*(r-l+1)/2;
}
*/
void edit() {
  // string s; getline(cin,s);
  // v.resize(num);
  // create(dp,N,M,val);
  // vector<int> vec;
  // vec.pb(10);vec.pb(20);vec.pb(70);vec.pb(80);
  // tr(vec,it)
  // cout<<(*it)<<' ';
  // vector<int> v;
  // v.pb(30);v.pb(40);v.pb(50);v.pb(60);
  // vec.insert(vec.begin()+2,all(v));
  // copy(all(v1),inserter(v2,it));

  // a[i]^a[i+j]^a[i+j+k]=='B'^'G'^'R';
  // last element of set -> s.rbegin()
  // sqrt= binary search
  return;
}
/*
void solv()
{
string s; cin>>s;
reverse(all(s));
int a[s.size()+1];
a[0]=0;
int ct[2019]={0};
ct[0]=1;
int ml=1;
rep(i,0,s.size())
{
a[i+1]=(a[i]+(s[i-1]-'0')*ml)%2019;
ml=10*ml % 2019;
ct[a[i+1]]++;
}
int ans=0;
rep(i,0,2019)
{
int x=ct[i]*(ct[i]-1)/2;
ans+=x;
}
cout<<ans;
return ;
}

void tdo()
{
    int n,k; cin>>n>>k;
        int a[n],b[k];
        rep(i,0,n)
        cin>>a[i];
        rep(i,0,k)
        cin>>b[i];
        sort(a,a+n);
        int p[k+1];
        p[0]=0;
        int j=1;
        rep(i,0,n)
        {
        if(a[i]>j)
        {
                while(j<=k && a[i]>j)
                {
                j++;
                p[j]=p[j-1];
                }
        }
        if(j>k)
        break;
        p[j]=p[j-1]+1;
        }
        rep(i,1,k+1)
        cout<<p[i]<<' ';
return ;
}
*/

void solve() {
  int n;
  ll ans = 0;
  cin >> n;
  map<ll, ll> mp1, mp2;
  ll a[n];
  rep(i, 0, n) {
    cin >> a[i];
    mp1[a[i] + i]++;
    mp2[a[i] - i]++;
  }
  map<ll, ll>::iterator it;
  for (it = mp1.begin(); it != mp1.end(); it++) {
    ans += (it->second * mp2[-it->first]);
  }
  cout << ans;
  return;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int t = 1;
  //	cin>>t;
  while (t--) {
    solve();
  }
  return 0;
}

//  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMHBYYYWMMMM#BYYTTTYWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMB9O1==?????zzCC111>>;;;;;;;;;;;<?TMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM9Olll=l======??????????>>>>>>;;;;;;;;;:;?TMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMMMM9ttlllllllll=l=======?????????>>>>>>;;;;;;;;;;?TMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMBOttOtttttltlllllllll=======??????????>>>>>>>;;;;;;?TMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMBttwOtttttttttttttlllllllll========?????????>>>>>>;;;;;<TMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMBrwZrttttttttttttttttttlllllllllll======???????????>>>>>>;;?HMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMSw0trtrrtrtrttrtttttttttttttlllOllllll========????<<zz??>>>>>>ZMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMX0ttrtrOOttrttrttOOttttttttttttltwllllllllll========??wy?????>>>vZMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMM0ttrI+wV1rtttttttwZtttttttltttOwylOXOllllllllllll=l====1dkz???????vZdMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMSrrwrtwZCjttttttttwSttOlllltllllwtXOlZkOlllllllllllllll==z+dk===?????X2JMMMMMMMMMMMMM
//  MMMMMMMMMMMMMBrtwwtrw0<jttttttttOXllOttltllttllOZwHOtXkyltlllllllllllllll<+XZ======?dk?JMMMMMMMMMMMM
//  MMMMMMMMMMMMStwdZtwXC<+ttttttOOOd6ltZlltllllttllStWWOOHWytttttltltOllltllz:zHllll===zX=?dMMMMMMMMMMM
//  MMMMMMMMMMBrwdKOtwW3;;zrttttwZwXRlldOllltltlltttwlXvktdXWytltttttttOttlttl<<dklllllllZ===dMMMMMMMMMM
//  MMMMMMMMM8tQM#ttwW3;;;1trttwSwfUOlORltllltlllllldtX>dktDOWOtlttltttOOttltO<;+WOllllllXlllzMMMMMMMMMM
//  MMMMMMMM9OdM#Ottd$;;;;;<?1z0OKjRltd0llltOllllllldZX>?WOw_WWOtttttttttOttI<;;<dkttttllllllldMMMMMMMMM
//  MMMMMMM9wMMMSttwS<;;;;>;;;J<j>(I<?U111zltllllllld0X>~dkwl(WkttlttlOOwWk<;;:;;zHttttttwOllllMMMMMMMMM
//  MMMMMMBdMMM8tttdI+zttttttdSXt~dlzXwlllzzOzzzzzlldkW<~?kOk~?sx++++jdHmH6+++<;;jdZtttttdkOtlldMMMMMMMM
//  MMMMM#dMMM#tttw0+tttttttdKdf((RsdfRllllldZllltlldWK~~_W0w_~OWOlOdgg9ZtOWOtttz+wktttttdpktttwMMMMMMMM
//  MMMMMWMMMMSlttdIttttttOdWHH>~(IzWDRll=llzRlllzlldk$>++dkd<~_XkdgH9tttttdktttt+OkrttrtdfpkttOMMMMMMMM
//  MMMMNWMMM#Zttlk=tttttOXWWd$_.(IdW1R=llll=SlllzOldK<_._(kd6+-(MM9lltttttrWktttztWZttrwXppWttrMMMMMMMM
//  MMMMNMMMM#lltwDzttllOXyW0X:..(OXk<Rl=ll=lwOlllOld3<``.(Rd>~?CdklllltttttXdXttzOWktrwwWpfpkrtMMMMMMMM
//  MMMMMMMMM@ltldIzlttOXyW$w$```(OyD(Rl==llldZ=llIlw;~```-Xd:~~~~UkylltttAyHdgSrzObRtOXwpfppWrrMMMMMMMM
//  MMMMMMMMM@llldtlllldVyW+d>```.wZ$ wl==lI=wRl=ll=w<````
//  dd_..~~(RZXOQdggHH9ZwrzwHWrdXXppfppkrMMMMMMMM
//  MMMMMMMMM#llldlltlwyyyD(S-...,Wk] zI=l=llzWzl=l=P~````
//  jZ``...~zQkH@MBUtrZtrtldHRdSdpfpffpkwMMMMMMMM
//  MMMMNMMMMNZllXtllldVyW3(Mf=<ONMHP~(k===l=zdk=lld3```...(C````..(M96lttttrrtrrtdHWHXpfpppfpRwMMMMMMMM
//  MMMMMMMMMMNzzWZllzyyyy(W@`  =~MWK6 jz=lzlzvRz=lZ`.I+JgkWm&-.
//  `..(ZltlttttrtttrWWHppfppfpppSdMMMMMMMM MMMMMMMMMMMkAWRllzVyyS_(b
//  .MNHU-(Uz=lI={XkzO>.dVT7<TMHMNHHx-.(kwZyltttrtrrdHHpfppfpffpp0dMMMMMMMM
//  MMMMMMMMMMMMKyWzOzyyyk.`<!  hdWMH]``(S==t=l(kX2 ?_`
//  WMMHH#HH+.XwkwOttttrwrZ~(HfpfpppfpWwXMMMMMMMM MMMMMMMMMMMMMHWROOyyyW;` `.
//  (WVM#b```(0=zzz wX!```  a.dM#NM@N(4WhXkXkWtttttwd3O_(HpffpfpfWwSMMMMMMMM
//  MMMMMMMMMMMMNZvWzXXyyXP```-_ ?o+?!````.4=Z=`(:````  HpbNNMHHH
//  (C=XXyWZWttrdwf:(>.dfppffppSXSMMMMMMMM
//  MMMMMMMMMMMMMRzuHzXyZXH.``````````````` ?zz ``````` ZKvTHHbWt ``
//  XZyyHZWOdSZ<::~`(fpfpfffXp0WMMMMMMM
//  MMMMMMMMMMMMMKzyyHvyZZW____.`````````````.I_````````
//  ?nJzX7^````.WXWyyHyWKZ<:::_`Jffpfpfpfp0WMMMMMMM
//  MMMMMMMMMMMMM@zZyZWwWyXo-_~(~ ```````````` ``````````````
//  _`````.WXkyyVWmWc::<~ .HffppfffffkXMMMMMMM
//  MMMMMMMMMMMMMKzZZZZXkUXr~....```````....```````````` ...
//  ````..JXWWyyW83vXx~..WfffVfWVffffkdMMMMMMM
//  MMMMMMMMMMMMMRzZZZZZZZZb````````````<````````````./<~._<_.____`(WfdyW3<:~~(XWkVVVVVVVHVVVVV0dMMMMMMM
//  MMMMMMMMMMMMMSzZZZZZZZWX-```````````````````````````.......~~._j9jX=_~~_(XZyVHHkyyyyWHyyykykOMMMMMMM
//  MMMMMMMMMMMMMSzuuuuuZXWZW,```````````````````````````````.``..(3<!
//  ...JWyyXWyyyWHkyyWHyyyHyklMMMMMMM MMMMMMMMMMMMNXzuuuXXuXSuuXh,```````` ....
//  ```````````````````_~ .JWyyyyZyy0HyyZyyZyZXWZZZWHZIdMMMMMM
//  MMMMMMMMMMMMNwtuuuXkuXXuuuuXh,``````(:::~<?71(,``````````````.(UMNUkZZZZZZZHZZ0ZZZZZWWZZZWNXIdMMMMMM
//  MMMMMMMMMMMMNKOzuzXkuXuuuuuXuXW, ````
//  _~~~:~~(}```````````.(YC;::<kCfZZZZXO#ZZVZZZZZMZZuuMMNXzMMMMMM
//  MMMMMMMMMMMMHKOzzuXkzdzzzzuXXzuuU&.```````````````````
//  .JY>::::;;J=:dZuZuZd#uuruuuud#uuuXMMMNXdMMMMM
//  MMMMMMMMMMMMMNOvzzXkvMRzzzzXKzuzzzXh,
//  `````````````..JC<;:;;:;;+7<:~(HHuXIdNuuzuuuXMSuuuWMMMMROMMMMM
//  MMMMMMMMMMMMMNvvvrdkvM#vzzzzHzzzzzuzzUG. ```
//  ...JdY<:;:;:::;;+v<~~~:(HpHmzMNXZzuzzd#zzzdMMMMMMRdMMMM
//  MMMMMMMMMMMMMNwrrvdRrMNwvvvvdRvvvzwkzzzzXWWHY=~~O+::::::::<+<~~~~~~~dppppWMMkZzzzwM#zzdMMMMMMMMNMMMM
//  MMMMMMMMMMMMMM#rrrwRrMMbOrrOZNkrvvvXwvvvvvwX;.~._W_:::::(?!~~~~~~~~(HpppppppHWdvwM#XwdMMMMMMMMMMNMMM
//  MMMMMMMMMMMMMMNyrrrRrWMMmzOrzdNyrrrZNvrwQWWfb....(r~~_J>_.....~.~~-dpfpffpfpppWHHMNdMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMNrtrStdMMMNxzrzMNmrrrdNWfVfffP._-.(~_J!............JpfpffpfpfffpppWNppppHMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMNOtXtdMMMMMNxzZMMNmgHyVVVVVW%..?/(.,(x-..........(HfffpffpffpffWHHffpffppfVyyWMMMMMM

Error: TLE

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
#define mem(a, b) memset(a, b, sizeof a);
#define vi vector<int>
#define vit vector<int>::iterator
#define all(ans) ans.begin(), ans.end()
#define sz(a) int(a.size())
#define ub upper_bound
#define lb lower_bound
#define create(Name, N, M, val) vector<vector<int>> Name(N, vector<int>(M, val))
#define ull unsigned long long
#define ll long long
#define db double
#define ldb long double
#define fl float
#define rep(i, a, b) for (int i = a; i < b; i++)
#define lrep(i, a, b) for (ll i = a; i < b; i++)
// #define all(c) c.begin(),c.end()
#define tr(c, it) for (typeof(c.begin()) it = c.begin(); it != c.end(); it++)
#define mpr make_pair
#define pb push_back
#define fr first
#define sn second
#define bpp(x) __builtin_popcountll(x)
const ldb PI =
    3.14159265358979323846264338327950288419716939937510582097494459230781640628620899863;
const long long INF = 1e9 + 7;
/*
bool ok(string &s ,int l ,int r)
{
while(s[l]==s[r]) l++,r--;
return l>=r;
}
int prime[]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,
67, 71, 73, 79, 83, 89,97,101,103}; int add(int a,int b) // integer range
{
long x=a+b;
if(x>=INF)
x-=INF;
return x;
}
int gcd(int a, int b)
{
while(b)
{
a%=b;
swap(a,b);
}
return a;
}
ll pw(ll a,int b)
{
ll res=1;
while(b)
{
if(b&1) res=(res*a)%998244353;
a=(a*a)%998244353;
b>>=1;
}
return res;
}
bool isFib(int n)
{
int x,y;
x=sqrt(5*n*n+4); y=sqrt(5*n*n-4);
return ((x*x)==(5*n*n+4))||((y*y)==(5*n*n-4));
}
int ExtU(int a,int b,int &x,int &y)
{
if(a==0)
{
x=0; y=1; return b;
}
int x1,y1;
int d=ExtU(b%a,a,x1,y1);
x=y1-(b/a)*x1;
y=x1;
return d;
}
int factors(int n)
{
int ct=0;
for(int i=1;i*i<=n;i++)
{
if(n%i==0)
{
if(i*i==n)
ct++;
else
ct+=2;
}
return ct;
}
}
vector<int>factorize(int n)
{
vi ans;
while(n%2==0)
{
ans.pb(2); n/=2;
}
for(int i=3;i<=sqrt(n);i+=2)
{
while(n%i==0)
{
ans.pb(i); n/=i;
}
}
if(n>2)
ans.pb(n);
return ans;
}
int mnpr[500003]={0};
void sprime(int n)
{
for(int i=2;i*i<=n;i++)
{
if(mnpr[i]==0)
{
for(int j=i*i;j<=n;j+=i)
{
if(mnpr[j]==0)
mnpr[j]=i;
}
}
}
for(int i=1;i<=n;i++)
if(mnpr[i]==0)
mnpr[i]=i;
}
int mxpr(int n)
{
int mx;
while(n&1==0)
{
mx=2; n>>=1;
}
for(int i=3;i*i<=n;i+=2)
{
while(n%i==0)
{
mx=i; n/=i;
}
}
if(n>2)
mx=n;
return mx;
}
bool seg[100005]={true};
void ss(int r,int l)
{
rep(i,0,r-l+2)
seg[i]=true;
for(int i=2;i*i<=r;i++)
{
for(int j=max(i*i,((l+i-1)/i)*i);j<=r;j+=i)
seg[j-l]=false;
}
}
int phi(int n)
{
int res=n;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
while(n%i==0)
n/=i;
res-=res/i;
}
}
if(n>1)
res-=res/n;
return res;
}
int ncr(int n,int r)
{
int C[r+1];
mem(C,0);
C[0]=1;
for(int i=1;i<=n;i++)
{
for(int j=min(i,r);j;j--)
{
C[j]=(C[j]+C[j-1])%INF;
}
}
return C[r];
}
int bitzero(int n)
{
int ct=0;
while(n)
{
ct+=!(n&1);
n>>=1;
}
return ct;
}
string twocom(string &s)
{
int i;
for(i=s.length()-1;i>=0;i--)
if(s[i]=='1')
break;
if(i==-1)
{
return '1'+s;
}
for(int k=i-1;k>=0;k--)
{
if(s[k]=='1')
s[k]='0';
else
s[k]='1';
}
return s;
}
goto e;

e:
;
ll sum(ll l,ll r)
{
return (l+r)*(r-l+1)/2;
}
*/
void edit() {
  // string s; getline(cin,s);
  // v.resize(num);
  // create(dp,N,M,val);
  // vector<int> vec;
  // vec.pb(10);vec.pb(20);vec.pb(70);vec.pb(80);
  // tr(vec,it)
  // cout<<(*it)<<' ';
  // vector<int> v;
  // v.pb(30);v.pb(40);v.pb(50);v.pb(60);
  // vec.insert(vec.begin()+2,all(v));
  // copy(all(v1),inserter(v2,it));

  // a[i]^a[i+j]^a[i+j+k]=='B'^'G'^'R';
  // last element of set -> s.rbegin()
  // sqrt= binary search
  return;
}
/*
void solv()
{
string s; cin>>s;
reverse(all(s));
int a[s.size()+1];
a[0]=0;
int ct[2019]={0};
ct[0]=1;
int ml=1;
rep(i,0,s.size())
{
a[i+1]=(a[i]+(s[i-1]-'0')*ml)%2019;
ml=10*ml % 2019;
ct[a[i+1]]++;
}
int ans=0;
rep(i,0,2019)
{
int x=ct[i]*(ct[i]-1)/2;
ans+=x;
}
cout<<ans;
return ;
}

void tdo()
{
    int n,k; cin>>n>>k;
        int a[n],b[k];
        rep(i,0,n)
        cin>>a[i];
        rep(i,0,k)
        cin>>b[i];
        sort(a,a+n);
        int p[k+1];
        p[0]=0;
        int j=1;
        rep(i,0,n)
        {
        if(a[i]>j)
        {
                while(j<=k && a[i]>j)
                {
                j++;
                p[j]=p[j-1];
                }
        }
        if(j>k)
        break;
        p[j]=p[j-1]+1;
        }
        rep(i,1,k+1)
        cout<<p[i]<<' ';
return ;
}
*/

void solve() {
  int n, x, ans = 0, sum = 0;
  cin >> n;
  map<int, map<int, int>> mp;
  map<int, map<int, int>>::iterator it, it1;
  rep(i, 0, n) {
    cin >> x;
    if (x < n)
      mp[x][i + 1] = 1;
  }
  for (it = mp.begin(); it != mp.end(); it++) {
    it1 = it;
    map<int, int> v1, v2;
    map<int, int>::iterator l1;
    v1 = it->second;
    for (; it1 != mp.end(); it1++) {
      if (it->first + it1->first >= n) {
        break;
      }
      v2 = it1->second;
      for (l1 = v1.begin(); l1 != v1.end(); l1++) {
        if (v2[l1->first + it->first + it1->first] == 1) {
          ans++; /*cout<<(it->first + it1->first)<<"\\n";*/
        }
        if (v2[l1->first - (it->first + it1->first)] == 1) {
          ans++; /* cout<<(it->first + it1->first)<<"\\n"; */
        }
      }
    }
    it1 = it;
    it1++;
    v1 = it->second;
    for (; it1 != mp.end(); it1++) {
      if (it->first + it1->first >= n) {
        break;
      }
      v2 = it1->second;
      for (l1 = v1.begin(); l1 != v1.end(); l1++) {
        if (v2[l1->first + it->first + it1->first] == 1) {
          sum++; /*cout<<(it->first + it1->first)<<"\\n";*/
        }
        if (v2[l1->first - (it->first + it1->first)] == 1) {
          sum++; /* cout<<(it->first + it1->first)<<"\\n"; */
        }
      }
    }
  }
  ans = (ans + sum) / 2;
  cout << ans;
  return;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int t = 1;
  //	cin>>t;
  while (t--) {
    solve();
  }
  return 0;
}

//  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMHBYYYWMMMM#BYYTTTYWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMB9O1==?????zzCC111>>;;;;;;;;;;;<?TMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM9Olll=l======??????????>>>>>>;;;;;;;;;:;?TMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMMMM9ttlllllllll=l=======?????????>>>>>>;;;;;;;;;;?TMMMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMMMBOttOtttttltlllllllll=======??????????>>>>>>>;;;;;;?TMMMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMMMBttwOtttttttttttttlllllllll========?????????>>>>>>;;;;;<TMMMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMMBrwZrttttttttttttttttttlllllllllll======???????????>>>>>>;;?HMMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMMSw0trtrrtrtrttrtttttttttttttlllOllllll========????<<zz??>>>>>>ZMMMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMMMX0ttrtrOOttrttrttOOttttttttttttltwllllllllll========??wy?????>>>vZMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMM0ttrI+wV1rtttttttwZtttttttltttOwylOXOllllllllllll=l====1dkz???????vZdMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMSrrwrtwZCjttttttttwSttOlllltllllwtXOlZkOlllllllllllllll==z+dk===?????X2JMMMMMMMMMMMMM
//  MMMMMMMMMMMMMBrtwwtrw0<jttttttttOXllOttltllttllOZwHOtXkyltlllllllllllllll<+XZ======?dk?JMMMMMMMMMMMM
//  MMMMMMMMMMMMStwdZtwXC<+ttttttOOOd6ltZlltllllttllStWWOOHWytttttltltOllltllz:zHllll===zX=?dMMMMMMMMMMM
//  MMMMMMMMMMBrwdKOtwW3;;zrttttwZwXRlldOllltltlltttwlXvktdXWytltttttttOttlttl<<dklllllllZ===dMMMMMMMMMM
//  MMMMMMMMM8tQM#ttwW3;;;1trttwSwfUOlORltllltlllllldtX>dktDOWOtlttltttOOttltO<;+WOllllllXlllzMMMMMMMMMM
//  MMMMMMMM9OdM#Ottd$;;;;;<?1z0OKjRltd0llltOllllllldZX>?WOw_WWOtttttttttOttI<;;<dkttttllllllldMMMMMMMMM
//  MMMMMMM9wMMMSttwS<;;;;>;;;J<j>(I<?U111zltllllllld0X>~dkwl(WkttlttlOOwWk<;;:;;zHttttttwOllllMMMMMMMMM
//  MMMMMMBdMMM8tttdI+zttttttdSXt~dlzXwlllzzOzzzzzlldkW<~?kOk~?sx++++jdHmH6+++<;;jdZtttttdkOtlldMMMMMMMM
//  MMMMM#dMMM#tttw0+tttttttdKdf((RsdfRllllldZllltlldWK~~_W0w_~OWOlOdgg9ZtOWOtttz+wktttttdpktttwMMMMMMMM
//  MMMMMWMMMMSlttdIttttttOdWHH>~(IzWDRll=llzRlllzlldk$>++dkd<~_XkdgH9tttttdktttt+OkrttrtdfpkttOMMMMMMMM
//  MMMMNWMMM#Zttlk=tttttOXWWd$_.(IdW1R=llll=SlllzOldK<_._(kd6+-(MM9lltttttrWktttztWZttrwXppWttrMMMMMMMM
//  MMMMNMMMM#lltwDzttllOXyW0X:..(OXk<Rl=ll=lwOlllOld3<``.(Rd>~?CdklllltttttXdXttzOWktrwwWpfpkrtMMMMMMMM
//  MMMMMMMMM@ltldIzlttOXyW$w$```(OyD(Rl==llldZ=llIlw;~```-Xd:~~~~UkylltttAyHdgSrzObRtOXwpfppWrrMMMMMMMM
//  MMMMMMMMM@llldtlllldVyW+d>```.wZ$ wl==lI=wRl=ll=w<````
//  dd_..~~(RZXOQdggHH9ZwrzwHWrdXXppfppkrMMMMMMMM
//  MMMMMMMMM#llldlltlwyyyD(S-...,Wk] zI=l=llzWzl=l=P~````
//  jZ``...~zQkH@MBUtrZtrtldHRdSdpfpffpkwMMMMMMMM
//  MMMMNMMMMNZllXtllldVyW3(Mf=<ONMHP~(k===l=zdk=lld3```...(C````..(M96lttttrrtrrtdHWHXpfpppfpRwMMMMMMMM
//  MMMMMMMMMMNzzWZllzyyyy(W@`  =~MWK6 jz=lzlzvRz=lZ`.I+JgkWm&-.
//  `..(ZltlttttrtttrWWHppfppfpppSdMMMMMMMM MMMMMMMMMMMkAWRllzVyyS_(b
//  .MNHU-(Uz=lI={XkzO>.dVT7<TMHMNHHx-.(kwZyltttrtrrdHHpfppfpffpp0dMMMMMMMM
//  MMMMMMMMMMMMKyWzOzyyyk.`<!  hdWMH]``(S==t=l(kX2 ?_`
//  WMMHH#HH+.XwkwOttttrwrZ~(HfpfpppfpWwXMMMMMMMM MMMMMMMMMMMMMHWROOyyyW;` `.
//  (WVM#b```(0=zzz wX!```  a.dM#NM@N(4WhXkXkWtttttwd3O_(HpffpfpfWwSMMMMMMMM
//  MMMMMMMMMMMMNZvWzXXyyXP```-_ ?o+?!````.4=Z=`(:````  HpbNNMHHH
//  (C=XXyWZWttrdwf:(>.dfppffppSXSMMMMMMMM
//  MMMMMMMMMMMMMRzuHzXyZXH.``````````````` ?zz ``````` ZKvTHHbWt ``
//  XZyyHZWOdSZ<::~`(fpfpfffXp0WMMMMMMM
//  MMMMMMMMMMMMMKzyyHvyZZW____.`````````````.I_````````
//  ?nJzX7^````.WXWyyHyWKZ<:::_`Jffpfpfpfp0WMMMMMMM
//  MMMMMMMMMMMMM@zZyZWwWyXo-_~(~ ```````````` ``````````````
//  _`````.WXkyyVWmWc::<~ .HffppfffffkXMMMMMMM
//  MMMMMMMMMMMMMKzZZZZXkUXr~....```````....```````````` ...
//  ````..JXWWyyW83vXx~..WfffVfWVffffkdMMMMMMM
//  MMMMMMMMMMMMMRzZZZZZZZZb````````````<````````````./<~._<_.____`(WfdyW3<:~~(XWkVVVVVVVHVVVVV0dMMMMMMM
//  MMMMMMMMMMMMMSzZZZZZZZWX-```````````````````````````.......~~._j9jX=_~~_(XZyVHHkyyyyWHyyykykOMMMMMMM
//  MMMMMMMMMMMMMSzuuuuuZXWZW,```````````````````````````````.``..(3<!
//  ...JWyyXWyyyWHkyyWHyyyHyklMMMMMMM MMMMMMMMMMMMNXzuuuXXuXSuuXh,```````` ....
//  ```````````````````_~ .JWyyyyZyy0HyyZyyZyZXWZZZWHZIdMMMMMM
//  MMMMMMMMMMMMNwtuuuXkuXXuuuuXh,``````(:::~<?71(,``````````````.(UMNUkZZZZZZZHZZ0ZZZZZWWZZZWNXIdMMMMMM
//  MMMMMMMMMMMMNKOzuzXkuXuuuuuXuXW, ````
//  _~~~:~~(}```````````.(YC;::<kCfZZZZXO#ZZVZZZZZMZZuuMMNXzMMMMMM
//  MMMMMMMMMMMMHKOzzuXkzdzzzzuXXzuuU&.```````````````````
//  .JY>::::;;J=:dZuZuZd#uuruuuud#uuuXMMMNXdMMMMM
//  MMMMMMMMMMMMMNOvzzXkvMRzzzzXKzuzzzXh,
//  `````````````..JC<;:;;:;;+7<:~(HHuXIdNuuzuuuXMSuuuWMMMMROMMMMM
//  MMMMMMMMMMMMMNvvvrdkvM#vzzzzHzzzzzuzzUG. ```
//  ...JdY<:;:;:::;;+v<~~~:(HpHmzMNXZzuzzd#zzzdMMMMMMRdMMMM
//  MMMMMMMMMMMMMNwrrvdRrMNwvvvvdRvvvzwkzzzzXWWHY=~~O+::::::::<+<~~~~~~~dppppWMMkZzzzwM#zzdMMMMMMMMNMMMM
//  MMMMMMMMMMMMMM#rrrwRrMMbOrrOZNkrvvvXwvvvvvwX;.~._W_:::::(?!~~~~~~~~(HpppppppHWdvwM#XwdMMMMMMMMMMNMMM
//  MMMMMMMMMMMMMMNyrrrRrWMMmzOrzdNyrrrZNvrwQWWfb....(r~~_J>_.....~.~~-dpfpffpfpppWHHMNdMMMMMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMNrtrStdMMMNxzrzMNmrrrdNWfVfffP._-.(~_J!............JpfpffpfpfffpppWNppppHMMMMMMMMMMMM
//  MMMMMMMMMMMMMMMMNOtXtdMMMMMNxzZMMNmgHyVVVVVW%..?/(.,(x-..........(HfffpffpffpffWHHffpffppfVyyWMMMMMM