#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;
// count all the i j pairs i<j such that abs(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(abs(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++){
// int complement1=arr[i]-k;
// int complement2=k+arr[i];
// if(ok.find(complement1)!=ok.end()){
// count+=ok[complement1];
// }
// if(ok.find(complement2)!=ok.end()){
// count+=ok[complement2];
// }
// ok[arr[i]]++;
// }
// cout<<count<<endl;
//-------prefix sum--------
// int arr[]={3,4,1,2,1,4};
// int l=2 ,r=5;
// for(int i=1;i<6;i++){
// arr[i]+=arr[i-1];
// }
// cout<<arr[r]-arr[l-1];
//count the total number of subarrays with sum==k;
//brute force O(n2)
// int arr[]={1,0,1,2,0,10,5};
// int k=4;
// int count=0;
// for(int i=0;i<7;i++){
// int sum=arr[i];
// for(int j=i+1;j<7;j++){
// sum+=arr[j];
// if(sum==k){
// count++;
// cout<<i<<" "<<j<<endl;
// }
// }
// }
// cout<<count<<endl;
//brute force part 2
// int arr[]={1,0,1,2,0,10,5};
// int arr1[]={0,0,0,3,0,0,0};
// int prefix[8]={0}; // prefix sum size will be one more than arr
// int totalsubarrays=0;
// int k=3;
// for(int i=1;i<8;i++){
// prefix[i]=prefix[i-1]+arr1[i-1];
// }
// int count=0;
// for(int i=1;i<8;i++){
// for(int j=0;j<=i;j++){
// if(prefix[i]-k==prefix[j]){
// count++;
// cout<<j<<" "<<i-1<<endl;
// }// hume ye to pata hai ki sum ==k to hoga subarray ka
// totalsubarrays++;
// }
// }
// cout<<totalsubarrays<<endl;
// cout<<count<<endl;
//hashmap
// int arr[]={1,0,1,2,0,1,0,5};
// unordered_map<int,int> ok;
// ok[0]=1;
// int sum=0,count=0 ,k=4;
// for(int i=0;i<8;i++){
// sum+=arr[i];
// if(ok.find(sum-k)!=ok.end()){
// count+=ok[sum-k];
// }
// ok[sum]++;
// }
// for(auto it=ok.begin();it!=ok.end();it++){
// cout<<it->first<<" "<<it->second<<endl;
// }
// cout<<count<<endl;
//missing element in an array
// int arr[]={1};
// int n=sizeof(arr)/sizeof(arr[0]);
// unordered_map<int,int> ok;
// for(int i=0;i<n;i++){
// ok[arr[i]]++;
// }
// for(int i=1;i<n+2;i++){
// if(ok.find(i)==ok.end()){
// cout<<i<<endl;
// }
// }
//find the largest/smallest subarray with sum=k
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBwZXJzb257CglzdHJpbmcgbmFtZTsKCWludCBhZ2U7Cn07CmludCBtYWluKCkgewoJLy8gdmVjdG9yPGludD4gYXJyPXszLDIsMywzLDIsNH07CgkvLyBtYXA8aW50LGludD4gb2s7CgkvLyBmb3IoaW50IGk9MDtpPGFyci5zaXplKCk7aSsrKXsKCS8vIAlva1thcnJbaV1dKys7CgkvLyB9CgkvLyBpbnQgbWF4bCxtaW5sLG1heD0wLG1pbj07CgkvLyBmb3IoYXV0byBpdD1vay5iZWdpbigpO2l0IT1vay5lbmQoKTtpdCsrKXsKCS8vIAljb3V0PDxpdC0+Zmlyc3Q8PCIgICI8PGl0LT5zZWNvbmQ8PGVuZGw7CgkvLyAJaWYoaXQtPnNlY29uZD5tYXgpewoJLy8gCQltYXg9aXQtPnNlY29uZDsKCS8vIAkJbWF4bD1pdC0+Zmlyc3Q7CgkvLyAJfSAKCS8vIAlpZihpdC0+c2Vjb25kIDwgbWluKXsKCS8vIAkJbWluPWl0LT5zZWNvbmQ7CgkvLyAJCW1pbmw9aXQtPmZpcnN0OwoJLy8gCX0KCS8vIH0KCS8vIGNvdXQ8PCJtYXhlbGVtZW50ICAiPDxtYXhsPDwiICBmcmVxICAiPDxtYXg7CgkvLyBjb3V0PDwibWluZWxlbWVudCAgICI8PG1pbmw8PCIgICAgZnJlcSAgIjw8bWluOwoJCgkKCS8vIHZlY3RvcjxwZXJzb24+IHBlb3BsZTsKCS8vIHBlb3BsZS5wdXNoX2JhY2soeyJhc2hhIiwyMn0pOwoJLy8gcGVvcGxlLnB1c2hfYmFjayh7InByZW0iLDE4fSk7CgkvLyBwZW9wbGUucHVzaF9iYWNrKHsiYW51Iiw0OH0pOwoJLy8gZm9yKGF1dG8mIGl0OnBlb3BsZSl7CgkvLyAJY291dDw8KGl0KS5uYW1lPDxlbmRsOyAvL2hlcmUgaXQgaXMgYSByZWZlcmVuY2UgdmFyaWFibGUKCS8vIH0KCQoJLy8gbWFwPHN0cmluZyxwZXJzb24+IG9rOwoJLy8gb2tbImFzaGEiXT17ImFzaGEiLDIyfTsKCS8vIG9rWyJwcmVtIl09eyJwcmVtIiwxOH07CgkvLyBva1siYW51Il09eyJhbnUiLDIzfTsKCQoJLy8gZm9yKGF1dG8mIGl0Om9rKXsKCS8vIAljb3V0PDxpdC5zZWNvbmQuYWdlPDxlbmRsOwoJLy8gfQoJCgkvLyBmb3IoYXV0byBpdD1vay5iZWdpbigpO2l0IT1vay5lbmQoKTtpdCsrKXsKCS8vIAljb3V0PDxpdC0+c2Vjb25kLmFnZTw8ZW5kbDsKCS8vIH0KCS8vIGNvdXQ8PG9rWyJhc2hhIl0ubmFtZTw8ZW5kbDsKCQoJLy8gLS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IHR3byBlcXVhbCBudW1iZXJzIGluIGFuIGFycmF5IGF0IGEgZGlzdGFuY2UgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGstLQoJLy8gYnJ1dGUgZm9yY2UgbyhuMikKCS8vIGludCBhcnJbXT17MSwyLDEsMyw0LDIsMywzfTsKCS8vIGludCBrPTIsY291bnQ9MDsKCS8vIGZvcihpbnQgaT0wO2k8NztpKyspewoJLy8gCWZvcihpbnQgaj1pKzE7ajw9aStrICYmIGo8ODtqKyspewoJLy8gCQlpZihhcnJbaV09PWFycltqXSl7CgkvLyAJCQljb3VudCsrOwoJLy8gCQl9CgkvLyAJfQoJLy8gfQoJLy8gY291dDw8Y291bnQ7CgkKCS8vaGFzaG1hcAoJLy8gaW50IGFycltdPXsxLDIsMSwzLDQsMiwzLDN9OwoJLy8gaW50IGs9Mixjb3VudD0wOwoJLy8gdW5vcmRlcmVkX21hcDxpbnQsaW50Pm9rOwoJLy8gZm9yKGludCBpPTA7aTw4O2krKyl7CgkvLyAJaWYob2suZmluZChhcnJbaV0pIT1vay5lbmQoKSAmJiBpLW9rW2FycltpXV08PWspewoJLy8gCQljb3VudCsrOwoJLy8gCX0KCS8vIAlva1thcnJbaV1dPWk7CgkJCgkvLyB9CgkvLyBjb3V0PDxjb3VudDw8ZW5kbDsKCS8vIGZvcihhdXRvIGl0PW9rLmJlZ2luKCk7aXQhPW9rLmVuZCgpO2l0KyspewoJLy8gCWNvdXQ8PGl0LT5maXJzdDw8IiAgICAgIjw8aXQtPnNlY29uZDw8ZW5kbDsKCS8vIH0KCQoJCgkvL2NvdW50IGFsbCB0aGUgaSBqIHBhaXJzIGk8aiBzdWNoIHRoYXQgYXJyW2ldK2FycltqXT09awoJLy8gYnJ1dGUgZm9yY2UKCS8vIGludCBhcnJbXT17MSwyLDEsMyw0LDIsMywzfTsKCS8vIGludCBrPTMsY291bnQ9MDsKCS8vIGZvcihpbnQgaT0wO2k8ODtpKyspewoJLy8gCWZvcihpbnQgaj1pKzE7ajw4O2orKyl7CgkvLyAJCWlmKGFycltpXSthcnJbal09PWspewoJLy8gCQkJY291bnQrKzsKCS8vIAkJCWNvdXQ8PGk8PCIgICAgICI8PGo8PGVuZGw7CgkvLyAJCX0KCS8vIAl9CgkvLyB9CgkvLyBjb3V0PDxjb3VudDw8ZW5kbDsKCQoJLy9oYXNobWFwCgkvLyB1bm9yZGVyZWRfbWFwPGludCxpbnQ+IG9rOwoJLy8gaW50IGFycltdPXsxLDIsMSwzLDQsMiwzLDN9OwoJLy8gaW50IGs9Mixjb3VudD0wOwoJLy8gZm9yKGludCBpPTA7aTw4O2krKyl7CgkvLyAJaWYob2suZmluZChrLWFycltpXSkhPW9rLmVuZCgpKXsKCS8vIAkJYXV0byBpdD1vay5maW5kKGstYXJyW2ldKTsKCS8vIAkJY291bnQrPWl0LT5zZWNvbmQ7CgkvLyAJfQoJLy8gCW9rW2FycltpXV0rKzsKCS8vIH0KCS8vIGNvdXQ8PGNvdW50PDxlbmRsOwoJCgkKCS8vIC8vIGNvdW50IGFsbCB0aGUgaSBqIHBhaXJzIGk8aiBzdWNoIHRoYXQgYXJyW2ldLWFycltqXT09awoJLy8gYnJ1dGUgZm9yY2UKCS8vIGludCBhcnJbXT17MSwyLDEsMyw0LDIsMywzfTsKCS8vIGludCBrPTEsY291bnQ9MDsKCS8vIGZvcihpbnQgaT0wO2k8ODtpKyspewoJLy8gCWZvcihpbnQgaj1pKzE7ajw4O2orKyl7CgkvLyAJCWlmKGFycltpXS1hcnJbal09PWspewoJLy8gCQkJY291bnQrKzsKCS8vIAkJCWNvdXQ8PGk8PCIgICAgICI8PGo8PGVuZGw7CgkvLyAJCX0KCS8vIAl9CgkvLyB9CgkvLyBjb3V0PDxjb3VudDw8ZW5kbDsKCQoJCgkvL2hhc2htYXAKCS8vIHVub3JkZXJlZF9tYXA8aW50LGludD4gb2s7CgkvLyBpbnQgYXJyW109ezEsMiwxLDMsNCwyLDMsM307CgkvLyBpbnQgaz0xLGNvdW50PTA7CgkvLyBmb3IoaW50IGk9MDtpPDg7aSsrKXsKCS8vIAlpZihvay5maW5kKGsrYXJyW2ldKSE9b2suZW5kKCkpewoJLy8gCQlhdXRvIGl0PW9rLmZpbmQoaythcnJbaV0pOwoJLy8gCQljb3VudCs9aXQtPnNlY29uZDsKCS8vIAl9CgkvLyAJb2tbYXJyW2ldXSsrOwoJLy8gfQoJLy8gY291dDw8Y291bnQ8PGVuZGw7CgkKCS8vIGNvdW50IGFsbCB0aGUgaSBqIHBhaXJzIGk8aiBzdWNoIHRoYXQgYWJzKGFycltpXS1hcnJbal0pPT1rCgkvLyBicnV0ZSBmb3JjZQoJLy8gaW50IGFycltdPXsxLDIsMSwzLDQsMiwzLDN9OwoJLy8gaW50IGs9MSxjb3VudD0wOwoJLy8gZm9yKGludCBpPTA7aTw4O2krKyl7CgkvLyAJZm9yKGludCBqPWkrMTtqPDg7aisrKXsKCS8vIAkJaWYoYWJzKGFycltpXS1hcnJbal0pPT1rKXsKCS8vIAkJCWNvdW50Kys7CgkvLyAJCQljb3V0PDxpPDwiICAgICAiPDxqPDxlbmRsOwoJLy8gCQl9CgkvLyAJfQoJLy8gfQoJLy8gY291dDw8Y291bnQ8PGVuZGw7CgkKCS8vaGFzaG1hcAoJLy8gdW5vcmRlcmVkX21hcDxpbnQsaW50PiBvazsKCS8vIGludCBhcnJbXT17MSwyLDEsMyw0LDIsMywzfTsKCS8vIGludCBrPTEsY291bnQ9MDsKCS8vIGZvcihpbnQgaT0wO2k8ODtpKyspewoJLy8gCWludCBjb21wbGVtZW50MT1hcnJbaV0tazsKCS8vIAlpbnQgY29tcGxlbWVudDI9aythcnJbaV07CgkvLyAJaWYob2suZmluZChjb21wbGVtZW50MSkhPW9rLmVuZCgpKXsKCS8vIAkJY291bnQrPW9rW2NvbXBsZW1lbnQxXTsKCS8vIAl9CgkvLyAJaWYob2suZmluZChjb21wbGVtZW50MikhPW9rLmVuZCgpKXsKCS8vIAkJY291bnQrPW9rW2NvbXBsZW1lbnQyXTsKCS8vIAl9CgkvLyAJb2tbYXJyW2ldXSsrOwoJCQoJLy8gfQoJLy8gY291dDw8Y291bnQ8PGVuZGw7CgoJCgkvLy0tLS0tLS1wcmVmaXggc3VtLS0tLS0tLS0KCS8vIGludCBhcnJbXT17Myw0LDEsMiwxLDR9OwoJLy8gaW50IGw9MiAscj01OwoJLy8gZm9yKGludCBpPTE7aTw2O2krKyl7CgkvLyAJYXJyW2ldKz1hcnJbaS0xXTsKCS8vIH0KCS8vIGNvdXQ8PGFycltyXS1hcnJbbC0xXTsKCQoJCgkvL2NvdW50IHRoZSB0b3RhbCBudW1iZXIgb2Ygc3ViYXJyYXlzIHdpdGggc3VtPT1rOwoJLy9icnV0ZSBmb3JjZSBPKG4yKQoJLy8gaW50IGFycltdPXsxLDAsMSwyLDAsMTAsNX07CgkvLyBpbnQgaz00OwoJLy8gaW50IGNvdW50PTA7CgkvLyBmb3IoaW50IGk9MDtpPDc7aSsrKXsKCS8vIAlpbnQgc3VtPWFycltpXTsKCS8vIAlmb3IoaW50IGo9aSsxO2o8NztqKyspewoJLy8gCQlzdW0rPWFycltqXTsKCS8vIAkJaWYoc3VtPT1rKXsKCS8vIAkJCWNvdW50Kys7CgkvLyAJCQljb3V0PDxpPDwiICAgICI8PGo8PGVuZGw7CgkJCQkKCS8vIAkJfQoJLy8gCX0KCS8vIH0KCS8vIGNvdXQ8PGNvdW50PDxlbmRsOwoJCgkKCS8vYnJ1dGUgZm9yY2UgcGFydCAyCgkvLyBpbnQgYXJyW109ezEsMCwxLDIsMCwxMCw1fTsKCS8vIGludCBhcnIxW109ezAsMCwwLDMsMCwwLDB9OwoJLy8gaW50IHByZWZpeFs4XT17MH07IC8vIHByZWZpeCBzdW0gc2l6ZSB3aWxsIGJlIG9uZSBtb3JlIHRoYW4gYXJyCgkvLyBpbnQgdG90YWxzdWJhcnJheXM9MDsKCQoJLy8gaW50IGs9MzsKCS8vIGZvcihpbnQgaT0xO2k8ODtpKyspewoJLy8gCXByZWZpeFtpXT1wcmVmaXhbaS0xXSthcnIxW2ktMV07CgkvLyB9CgkvLyBpbnQgY291bnQ9MDsKCS8vIGZvcihpbnQgaT0xO2k8ODtpKyspewoJLy8gCWZvcihpbnQgaj0wO2o8PWk7aisrKXsKCS8vIAkJIGlmKHByZWZpeFtpXS1rPT1wcmVmaXhbal0pewoJLy8gCQkJY291bnQrKzsKCS8vIAkJCWNvdXQ8PGo8PCIgICAgIjw8aS0xPDxlbmRsOwoJLy8gCQkgfS8vIGh1bWUgeWUgdG8gcGF0YSBoYWkga2kgc3VtID09ayB0byBob2dhIHN1YmFycmF5IGthCgkvLyAJCXRvdGFsc3ViYXJyYXlzKys7CgkvLyAJfQoJLy8gfQoJLy8gY291dDw8dG90YWxzdWJhcnJheXM8PGVuZGw7CgkvLyBjb3V0PDxjb3VudDw8ZW5kbDsKCQoJCgkvL2hhc2htYXAKCS8vIGludCBhcnJbXT17MSwwLDEsMiwwLDEsMCw1fTsKCS8vIHVub3JkZXJlZF9tYXA8aW50LGludD4gb2s7CgkvLyBva1swXT0xOwoJLy8gaW50IHN1bT0wLGNvdW50PTAgLGs9NDsKCS8vIGZvcihpbnQgaT0wO2k8ODtpKyspewoJLy8gCXN1bSs9YXJyW2ldOwoJLy8gCWlmKG9rLmZpbmQoc3VtLWspIT1vay5lbmQoKSl7CgkvLyAJCWNvdW50Kz1va1tzdW0ta107CgkvLyAJfQoJLy8gCW9rW3N1bV0rKzsKCS8vIH0KCS8vIGZvcihhdXRvIGl0PW9rLmJlZ2luKCk7aXQhPW9rLmVuZCgpO2l0KyspewoJLy8gCWNvdXQ8PGl0LT5maXJzdDw8IiAgICAgICI8PGl0LT5zZWNvbmQ8PGVuZGw7CgkvLyB9CgkvLyBjb3V0PDxjb3VudDw8ZW5kbDsKCQoJLy9taXNzaW5nIGVsZW1lbnQgaW4gYW4gYXJyYXkKCS8vIGludCBhcnJbXT17MX07CgkvLyBpbnQgbj1zaXplb2YoYXJyKS9zaXplb2YoYXJyWzBdKTsKCS8vIHVub3JkZXJlZF9tYXA8aW50LGludD4gb2s7CgkvLyBmb3IoaW50IGk9MDtpPG47aSsrKXsKCS8vIAlva1thcnJbaV1dKys7CgkvLyB9CgkvLyBmb3IoaW50IGk9MTtpPG4rMjtpKyspewoJLy8gCWlmKG9rLmZpbmQoaSk9PW9rLmVuZCgpKXsKCS8vIAkJY291dDw8aTw8ZW5kbDsKCS8vIAl9CgkvLyB9CgkKCS8vZmluZCB0aGUgbGFyZ2VzdC9zbWFsbGVzdCBzdWJhcnJheSB3aXRoIHN1bT1rCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJcmV0dXJuIDA7Cn0=