#include <bits/stdc++.h>
using namespace std;
struct person{
string name;
int age;
};
int main() {
// vector<int> arr={3,2,3,3,2,4};
// map<int,int> ok;
// for(int i=0;i<arr.size();i++){
// ok[arr[i]]++;
// }
// int maxl,minl,max=0,min=;
// for(auto it=ok.begin();it!=ok.end();it++){
// cout<<it->first<<" "<<it->second<<endl;
// if(it->second>max){
// max=it->second;
// maxl=it->first;
// }
// if(it->second < min){
// min=it->second;
// minl=it->first;
// }
// }
// cout<<"maxelement "<<maxl<<" freq "<<max;
// cout<<"minelement "<<minl<<" freq "<<min;
// vector<person> people;
// people.push_back({"asha",22});
// people.push_back({"prem",18});
// people.push_back({"anu",48});
// for(auto& it:people){
// cout<<(it).name<<endl; //here it is a reference variable
// }
// map<string,person> ok;
// ok["asha"]={"asha",22};
// ok["prem"]={"prem",18};
// ok["anu"]={"anu",23};
// for(auto& it:ok){
// cout<<it.second.age<<endl;
// }
// for(auto it=ok.begin();it!=ok.end();it++){
// cout<<it->second.age<<endl;
// }
// cout<<ok["asha"].name<<endl;
// --check if there are any two equal numbers in an array at a distance less than or equal to k--
// brute force o(n2)
// int arr[]={1,2,1,3,4,2,3,3};
// int k=2,count=0;
// for(int i=0;i<7;i++){
// for(int j=i+1;j<=i+k && j<8;j++){
// if(arr[i]==arr[j]){
// count++;
// }
// }
// }
// cout<<count;
//hashmap
// int arr[]={1,2,1,3,4,2,3,3};
// int k=2,count=0;
// unordered_map<int,int>ok;
// for(int i=0;i<8;i++){
// if(ok.find(arr[i])!=ok.end() && i-ok[arr[i]]<=k){
// count++;
// }
// ok[arr[i]]=i;
// }
// cout<<count<<endl;
// for(auto it=ok.begin();it!=ok.end();it++){
// cout<<it->first<<" "<<it->second<<endl;
// }
//count all the i j pairs i<j such that arr[i]+arr[j]==k
// brute force
// int arr[]={1,2,1,3,4,2,3,3};
// int k=3,count=0;
// for(int i=0;i<8;i++){
// for(int j=i+1;j<8;j++){
// if(arr[i]+arr[j]==k){
// count++;
// cout<<i<<" "<<j<<endl;
// }
// }
// }
// cout<<count<<endl;
//hashmap
// unordered_map<int,int> ok;
// int arr[]={1,2,1,3,4,2,3,3};
// int k=2,count=0;
// for(int i=0;i<8;i++){
// if(ok.find(k-arr[i])!=ok.end()){
// auto it=ok.find(k-arr[i]);
// count+=it->second;
// }
// ok[arr[i]]++;
// }
// cout<<count<<endl;
// count all the i j pairs i<j such that arr[i]-arr[j]==k
// brute force
// int arr[]={1,2,1,3,4,2,3,3};
// int k=1,count=0;
// for(int i=0;i<8;i++){
// for(int j=i+1;j<8;j++){
// if(arr[i]-arr[j]==k){
// count++;
// cout<<i<<" "<<j<<endl;
// }
// }
// }
// cout<<count<<endl;
//hashmap
unordered_map<int,int> ok;
int arr[]={1,2,1,3,4,2,3,3};
int k=1,count=0;
for(int i=0;i<8;i++){
if(ok.find(k+arr[i])!=ok.end()){
auto it=ok.find(k+arr[i]);
count+=it->second;
}
ok[arr[i]]++;
}
cout<<count<<endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBwZXJzb257CglzdHJpbmcgbmFtZTsKCWludCBhZ2U7Cn07CmludCBtYWluKCkgewoJLy8gdmVjdG9yPGludD4gYXJyPXszLDIsMywzLDIsNH07CgkvLyBtYXA8aW50LGludD4gb2s7CgkvLyBmb3IoaW50IGk9MDtpPGFyci5zaXplKCk7aSsrKXsKCS8vIAlva1thcnJbaV1dKys7CgkvLyB9CgkvLyBpbnQgbWF4bCxtaW5sLG1heD0wLG1pbj07CgkvLyBmb3IoYXV0byBpdD1vay5iZWdpbigpO2l0IT1vay5lbmQoKTtpdCsrKXsKCS8vIAljb3V0PDxpdC0+Zmlyc3Q8PCIgICI8PGl0LT5zZWNvbmQ8PGVuZGw7CgkvLyAJaWYoaXQtPnNlY29uZD5tYXgpewoJLy8gCQltYXg9aXQtPnNlY29uZDsKCS8vIAkJbWF4bD1pdC0+Zmlyc3Q7CgkvLyAJfSAKCS8vIAlpZihpdC0+c2Vjb25kIDwgbWluKXsKCS8vIAkJbWluPWl0LT5zZWNvbmQ7CgkvLyAJCW1pbmw9aXQtPmZpcnN0OwoJLy8gCX0KCS8vIH0KCS8vIGNvdXQ8PCJtYXhlbGVtZW50ICAiPDxtYXhsPDwiICBmcmVxICAiPDxtYXg7CgkvLyBjb3V0PDwibWluZWxlbWVudCAgICI8PG1pbmw8PCIgICAgZnJlcSAgIjw8bWluOwoJCgkKCS8vIHZlY3RvcjxwZXJzb24+IHBlb3BsZTsKCS8vIHBlb3BsZS5wdXNoX2JhY2soeyJhc2hhIiwyMn0pOwoJLy8gcGVvcGxlLnB1c2hfYmFjayh7InByZW0iLDE4fSk7CgkvLyBwZW9wbGUucHVzaF9iYWNrKHsiYW51Iiw0OH0pOwoJLy8gZm9yKGF1dG8mIGl0OnBlb3BsZSl7CgkvLyAJY291dDw8KGl0KS5uYW1lPDxlbmRsOyAvL2hlcmUgaXQgaXMgYSByZWZlcmVuY2UgdmFyaWFibGUKCS8vIH0KCQoJLy8gbWFwPHN0cmluZyxwZXJzb24+IG9rOwoJLy8gb2tbImFzaGEiXT17ImFzaGEiLDIyfTsKCS8vIG9rWyJwcmVtIl09eyJwcmVtIiwxOH07CgkvLyBva1siYW51Il09eyJhbnUiLDIzfTsKCQoJLy8gZm9yKGF1dG8mIGl0Om9rKXsKCS8vIAljb3V0PDxpdC5zZWNvbmQuYWdlPDxlbmRsOwoJLy8gfQoJCgkvLyBmb3IoYXV0byBpdD1vay5iZWdpbigpO2l0IT1vay5lbmQoKTtpdCsrKXsKCS8vIAljb3V0PDxpdC0+c2Vjb25kLmFnZTw8ZW5kbDsKCS8vIH0KCS8vIGNvdXQ8PG9rWyJhc2hhIl0ubmFtZTw8ZW5kbDsKCQoJLy8gLS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IHR3byBlcXVhbCBudW1iZXJzIGluIGFuIGFycmF5IGF0IGEgZGlzdGFuY2UgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGstLQoJLy8gYnJ1dGUgZm9yY2UgbyhuMikKCS8vIGludCBhcnJbXT17MSwyLDEsMyw0LDIsMywzfTsKCS8vIGludCBrPTIsY291bnQ9MDsKCS8vIGZvcihpbnQgaT0wO2k8NztpKyspewoJLy8gCWZvcihpbnQgaj1pKzE7ajw9aStrICYmIGo8ODtqKyspewoJLy8gCQlpZihhcnJbaV09PWFycltqXSl7CgkvLyAJCQljb3VudCsrOwoJLy8gCQl9CgkvLyAJfQoJLy8gfQoJLy8gY291dDw8Y291bnQ7CgkKCS8vaGFzaG1hcAoJLy8gaW50IGFycltdPXsxLDIsMSwzLDQsMiwzLDN9OwoJLy8gaW50IGs9Mixjb3VudD0wOwoJLy8gdW5vcmRlcmVkX21hcDxpbnQsaW50Pm9rOwoJLy8gZm9yKGludCBpPTA7aTw4O2krKyl7CgkvLyAJaWYob2suZmluZChhcnJbaV0pIT1vay5lbmQoKSAmJiBpLW9rW2FycltpXV08PWspewoJLy8gCQljb3VudCsrOwoJLy8gCX0KCS8vIAlva1thcnJbaV1dPWk7CgkJCgkvLyB9CgkvLyBjb3V0PDxjb3VudDw8ZW5kbDsKCS8vIGZvcihhdXRvIGl0PW9rLmJlZ2luKCk7aXQhPW9rLmVuZCgpO2l0KyspewoJLy8gCWNvdXQ8PGl0LT5maXJzdDw8IiAgICAgIjw8aXQtPnNlY29uZDw8ZW5kbDsKCS8vIH0KCQoJCgkvL2NvdW50IGFsbCB0aGUgaSBqIHBhaXJzIGk8aiBzdWNoIHRoYXQgYXJyW2ldK2FycltqXT09awoJLy8gYnJ1dGUgZm9yY2UKCS8vIGludCBhcnJbXT17MSwyLDEsMyw0LDIsMywzfTsKCS8vIGludCBrPTMsY291bnQ9MDsKCS8vIGZvcihpbnQgaT0wO2k8ODtpKyspewoJLy8gCWZvcihpbnQgaj1pKzE7ajw4O2orKyl7CgkvLyAJCWlmKGFycltpXSthcnJbal09PWspewoJLy8gCQkJY291bnQrKzsKCS8vIAkJCWNvdXQ8PGk8PCIgICAgICI8PGo8PGVuZGw7CgkvLyAJCX0KCS8vIAl9CgkvLyB9CgkvLyBjb3V0PDxjb3VudDw8ZW5kbDsKCQoJLy9oYXNobWFwCgkvLyB1bm9yZGVyZWRfbWFwPGludCxpbnQ+IG9rOwoJLy8gaW50IGFycltdPXsxLDIsMSwzLDQsMiwzLDN9OwoJLy8gaW50IGs9Mixjb3VudD0wOwoJLy8gZm9yKGludCBpPTA7aTw4O2krKyl7CgkvLyAJaWYob2suZmluZChrLWFycltpXSkhPW9rLmVuZCgpKXsKCS8vIAkJYXV0byBpdD1vay5maW5kKGstYXJyW2ldKTsKCS8vIAkJY291bnQrPWl0LT5zZWNvbmQ7CgkvLyAJfQoJLy8gCW9rW2FycltpXV0rKzsKCS8vIH0KCS8vIGNvdXQ8PGNvdW50PDxlbmRsOwoJCgkKCS8vIGNvdW50IGFsbCB0aGUgaSBqIHBhaXJzIGk8aiBzdWNoIHRoYXQgYXJyW2ldLWFycltqXT09awoJLy8gYnJ1dGUgZm9yY2UKCS8vIGludCBhcnJbXT17MSwyLDEsMyw0LDIsMywzfTsKCS8vIGludCBrPTEsY291bnQ9MDsKCS8vIGZvcihpbnQgaT0wO2k8ODtpKyspewoJLy8gCWZvcihpbnQgaj1pKzE7ajw4O2orKyl7CgkvLyAJCWlmKGFycltpXS1hcnJbal09PWspewoJLy8gCQkJY291bnQrKzsKCS8vIAkJCWNvdXQ8PGk8PCIgICAgICI8PGo8PGVuZGw7CgkvLyAJCX0KCS8vIAl9CgkvLyB9CgkvLyBjb3V0PDxjb3VudDw8ZW5kbDsKCQoJCgkvL2hhc2htYXAKCXVub3JkZXJlZF9tYXA8aW50LGludD4gb2s7CglpbnQgYXJyW109ezEsMiwxLDMsNCwyLDMsM307CglpbnQgaz0xLGNvdW50PTA7Cglmb3IoaW50IGk9MDtpPDg7aSsrKXsKCQlpZihvay5maW5kKGsrYXJyW2ldKSE9b2suZW5kKCkpewoJCQlhdXRvIGl0PW9rLmZpbmQoaythcnJbaV0pOwoJCQljb3VudCs9aXQtPnNlY29uZDsKCQl9CgkJb2tbYXJyW2ldXSsrOwoJfQoJY291dDw8Y291bnQ8PGVuZGw7CgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJcmV0dXJuIDA7Cn0=