#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;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBwZXJzb257CglzdHJpbmcgbmFtZTsKCWludCBhZ2U7Cn07CmludCBtYWluKCkgewoJLy8gdmVjdG9yPGludD4gYXJyPXszLDIsMywzLDIsNH07CgkvLyBtYXA8aW50LGludD4gb2s7CgkvLyBmb3IoaW50IGk9MDtpPGFyci5zaXplKCk7aSsrKXsKCS8vIAlva1thcnJbaV1dKys7CgkvLyB9CgkvLyBpbnQgbWF4bCxtaW5sLG1heD0wLG1pbj07CgkvLyBmb3IoYXV0byBpdD1vay5iZWdpbigpO2l0IT1vay5lbmQoKTtpdCsrKXsKCS8vIAljb3V0PDxpdC0+Zmlyc3Q8PCIgICI8PGl0LT5zZWNvbmQ8PGVuZGw7CgkvLyAJaWYoaXQtPnNlY29uZD5tYXgpewoJLy8gCQltYXg9aXQtPnNlY29uZDsKCS8vIAkJbWF4bD1pdC0+Zmlyc3Q7CgkvLyAJfSAKCS8vIAlpZihpdC0+c2Vjb25kIDwgbWluKXsKCS8vIAkJbWluPWl0LT5zZWNvbmQ7CgkvLyAJCW1pbmw9aXQtPmZpcnN0OwoJLy8gCX0KCS8vIH0KCS8vIGNvdXQ8PCJtYXhlbGVtZW50ICAiPDxtYXhsPDwiICBmcmVxICAiPDxtYXg7CgkvLyBjb3V0PDwibWluZWxlbWVudCAgICI8PG1pbmw8PCIgICAgZnJlcSAgIjw8bWluOwoJCgkKCS8vIHZlY3RvcjxwZXJzb24+IHBlb3BsZTsKCS8vIHBlb3BsZS5wdXNoX2JhY2soeyJhc2hhIiwyMn0pOwoJLy8gcGVvcGxlLnB1c2hfYmFjayh7InByZW0iLDE4fSk7CgkvLyBwZW9wbGUucHVzaF9iYWNrKHsiYW51Iiw0OH0pOwoJLy8gZm9yKGF1dG8mIGl0OnBlb3BsZSl7CgkvLyAJY291dDw8KGl0KS5uYW1lPDxlbmRsOyAvL2hlcmUgaXQgaXMgYSByZWZlcmVuY2UgdmFyaWFibGUKCS8vIH0KCQoJLy8gbWFwPHN0cmluZyxwZXJzb24+IG9rOwoJLy8gb2tbImFzaGEiXT17ImFzaGEiLDIyfTsKCS8vIG9rWyJwcmVtIl09eyJwcmVtIiwxOH07CgkvLyBva1siYW51Il09eyJhbnUiLDIzfTsKCQoJLy8gZm9yKGF1dG8mIGl0Om9rKXsKCS8vIAljb3V0PDxpdC5zZWNvbmQuYWdlPDxlbmRsOwoJLy8gfQoJCgkvLyBmb3IoYXV0byBpdD1vay5iZWdpbigpO2l0IT1vay5lbmQoKTtpdCsrKXsKCS8vIAljb3V0PDxpdC0+c2Vjb25kLmFnZTw8ZW5kbDsKCS8vIH0KCS8vIGNvdXQ8PG9rWyJhc2hhIl0ubmFtZTw8ZW5kbDsKCQoJLy8gLS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IHR3byBlcXVhbCBudW1iZXJzIGluIGFuIGFycmF5IGF0IGEgZGlzdGFuY2UgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGstLQoJLy8gYnJ1dGUgZm9yY2UgbyhuMikKCS8vIGludCBhcnJbXT17MSwyLDEsMyw0LDIsMywzfTsKCS8vIGludCBrPTIsY291bnQ9MDsKCS8vIGZvcihpbnQgaT0wO2k8NztpKyspewoJLy8gCWZvcihpbnQgaj1pKzE7ajw9aStrICYmIGo8ODtqKyspewoJLy8gCQlpZihhcnJbaV09PWFycltqXSl7CgkvLyAJCQljb3VudCsrOwoJLy8gCQl9CgkvLyAJfQoJLy8gfQoJLy8gY291dDw8Y291bnQ7CgkKCS8vaGFzaG1hcAoJLy8gaW50IGFycltdPXsxLDIsMSwzLDQsMiwzLDN9OwoJLy8gaW50IGs9Mixjb3VudD0wOwoJLy8gdW5vcmRlcmVkX21hcDxpbnQsaW50Pm9rOwoJLy8gZm9yKGludCBpPTA7aTw4O2krKyl7CgkvLyAJaWYob2suZmluZChhcnJbaV0pIT1vay5lbmQoKSAmJiBpLW9rW2FycltpXV08PWspewoJLy8gCQljb3VudCsrOwoJLy8gCX0KCS8vIAlva1thcnJbaV1dPWk7CgkJCgkvLyB9CgkvLyBjb3V0PDxjb3VudDw8ZW5kbDsKCS8vIGZvcihhdXRvIGl0PW9rLmJlZ2luKCk7aXQhPW9rLmVuZCgpO2l0KyspewoJLy8gCWNvdXQ8PGl0LT5maXJzdDw8IiAgICAgIjw8aXQtPnNlY29uZDw8ZW5kbDsKCS8vIH0KCQoJCgkvL2NvdW50IGFsbCB0aGUgaSBqIHBhaXJzIGk8aiBzdWNoIHRoYXQgYXJyW2ldK2FycltqXT09awoJLy8gYnJ1dGUgZm9yY2UKCS8vIGludCBhcnJbXT17MSwyLDEsMyw0LDIsMywzfTsKCS8vIGludCBrPTMsY291bnQ9MDsKCS8vIGZvcihpbnQgaT0wO2k8ODtpKyspewoJLy8gCWZvcihpbnQgaj1pKzE7ajw4O2orKyl7CgkvLyAJCWlmKGFycltpXSthcnJbal09PWspewoJLy8gCQkJY291bnQrKzsKCS8vIAkJCWNvdXQ8PGk8PCIgICAgICI8PGo8PGVuZGw7CgkvLyAJCX0KCS8vIAl9CgkvLyB9CgkvLyBjb3V0PDxjb3VudDw8ZW5kbDsKCQoJLy9oYXNobWFwCgkvLyB1bm9yZGVyZWRfbWFwPGludCxpbnQ+IG9rOwoJLy8gaW50IGFycltdPXsxLDIsMSwzLDQsMiwzLDN9OwoJLy8gaW50IGs9Mixjb3VudD0wOwoJLy8gZm9yKGludCBpPTA7aTw4O2krKyl7CgkvLyAJaWYob2suZmluZChrLWFycltpXSkhPW9rLmVuZCgpKXsKCS8vIAkJYXV0byBpdD1vay5maW5kKGstYXJyW2ldKTsKCS8vIAkJY291bnQrPWl0LT5zZWNvbmQ7CgkvLyAJfQoJLy8gCW9rW2FycltpXV0rKzsKCS8vIH0KCS8vIGNvdXQ8PGNvdW50PDxlbmRsOwoJCgkKCS8vIC8vIGNvdW50IGFsbCB0aGUgaSBqIHBhaXJzIGk8aiBzdWNoIHRoYXQgYXJyW2ldLWFycltqXT09awoJLy8gYnJ1dGUgZm9yY2UKCS8vIGludCBhcnJbXT17MSwyLDEsMyw0LDIsMywzfTsKCS8vIGludCBrPTEsY291bnQ9MDsKCS8vIGZvcihpbnQgaT0wO2k8ODtpKyspewoJLy8gCWZvcihpbnQgaj1pKzE7ajw4O2orKyl7CgkvLyAJCWlmKGFycltpXS1hcnJbal09PWspewoJLy8gCQkJY291bnQrKzsKCS8vIAkJCWNvdXQ8PGk8PCIgICAgICI8PGo8PGVuZGw7CgkvLyAJCX0KCS8vIAl9CgkvLyB9CgkvLyBjb3V0PDxjb3VudDw8ZW5kbDsKCQoJCgkvL2hhc2htYXAKCS8vIHVub3JkZXJlZF9tYXA8aW50LGludD4gb2s7CgkvLyBpbnQgYXJyW109ezEsMiwxLDMsNCwyLDMsM307CgkvLyBpbnQgaz0xLGNvdW50PTA7CgkvLyBmb3IoaW50IGk9MDtpPDg7aSsrKXsKCS8vIAlpZihvay5maW5kKGsrYXJyW2ldKSE9b2suZW5kKCkpewoJLy8gCQlhdXRvIGl0PW9rLmZpbmQoaythcnJbaV0pOwoJLy8gCQljb3VudCs9aXQtPnNlY29uZDsKCS8vIAl9CgkvLyAJb2tbYXJyW2ldXSsrOwoJLy8gfQoJLy8gY291dDw8Y291bnQ8PGVuZGw7CgkKCS8vIGNvdW50IGFsbCB0aGUgaSBqIHBhaXJzIGk8aiBzdWNoIHRoYXQgYWJzKGFycltpXS1hcnJbal0pPT1rCgkvLyBicnV0ZSBmb3JjZQoJLy8gaW50IGFycltdPXsxLDIsMSwzLDQsMiwzLDN9OwoJLy8gaW50IGs9MSxjb3VudD0wOwoJLy8gZm9yKGludCBpPTA7aTw4O2krKyl7CgkvLyAJZm9yKGludCBqPWkrMTtqPDg7aisrKXsKCS8vIAkJaWYoYWJzKGFycltpXS1hcnJbal0pPT1rKXsKCS8vIAkJCWNvdW50Kys7CgkvLyAJCQljb3V0PDxpPDwiICAgICAiPDxqPDxlbmRsOwoJLy8gCQl9CgkvLyAJfQoJLy8gfQoJLy8gY291dDw8Y291bnQ8PGVuZGw7CgkKCS8vaGFzaG1hcAoJLy8gdW5vcmRlcmVkX21hcDxpbnQsaW50PiBvazsKCS8vIGludCBhcnJbXT17MSwyLDEsMyw0LDIsMywzfTsKCS8vIGludCBrPTEsY291bnQ9MDsKCS8vIGZvcihpbnQgaT0wO2k8ODtpKyspewoJLy8gCWludCBjb21wbGVtZW50MT1hcnJbaV0tazsKCS8vIAlpbnQgY29tcGxlbWVudDI9aythcnJbaV07CgkvLyAJaWYob2suZmluZChjb21wbGVtZW50MSkhPW9rLmVuZCgpKXsKCS8vIAkJY291bnQrPW9rW2NvbXBsZW1lbnQxXTsKCS8vIAl9CgkvLyAJaWYob2suZmluZChjb21wbGVtZW50MikhPW9rLmVuZCgpKXsKCS8vIAkJY291bnQrPW9rW2NvbXBsZW1lbnQyXTsKCS8vIAl9CgkvLyAJb2tbYXJyW2ldXSsrOwoJCQoJLy8gfQoJLy8gY291dDw8Y291bnQ8PGVuZGw7CgoJCgkvLy0tLS0tLS1wcmVmaXggc3VtLS0tLS0tLS0KCS8vIGludCBhcnJbXT17Myw0LDEsMiwxLDR9OwoJLy8gaW50IGw9MiAscj01OwoJLy8gZm9yKGludCBpPTE7aTw2O2krKyl7CgkvLyAJYXJyW2ldKz1hcnJbaS0xXTsKCS8vIH0KCS8vIGNvdXQ8PGFycltyXS1hcnJbbC0xXTsKCQoJCgkvL2NvdW50IHRoZSB0b3RhbCBudW1iZXIgb2Ygc3ViYXJyYXlzIHdpdGggc3VtPT1rOwoJLy9icnV0ZSBmb3JjZSBPKG4yKQoJLy8gaW50IGFycltdPXsxLDAsMSwyLDAsMTAsNX07CgkvLyBpbnQgaz00OwoJLy8gaW50IGNvdW50PTA7CgkvLyBmb3IoaW50IGk9MDtpPDc7aSsrKXsKCS8vIAlpbnQgc3VtPWFycltpXTsKCS8vIAlmb3IoaW50IGo9aSsxO2o8NztqKyspewoJLy8gCQlzdW0rPWFycltqXTsKCS8vIAkJaWYoc3VtPT1rKXsKCS8vIAkJCWNvdW50Kys7CgkvLyAJCQljb3V0PDxpPDwiICAgICI8PGo8PGVuZGw7CgkJCQkKCS8vIAkJfQoJLy8gCX0KCS8vIH0KCS8vIGNvdXQ8PGNvdW50PDxlbmRsOwoJCgkKCS8vYnJ1dGUgZm9yY2UgcGFydCAyCglpbnQgYXJyW109ezEsMCwxLDIsMCwxMCw1fTsKCWludCBhcnIxW109ezAsMCwwLDMsMCwwLDB9OwoJaW50IHByZWZpeFs4XT17MH07IC8vIHByZWZpeCBzdW0gc2l6ZSB3aWxsIGJlIG9uZSBtb3JlIHRoYW4gYXJyCglpbnQgdG90YWxzdWJhcnJheXM9MDsKCQoJaW50IGs9MzsKCWZvcihpbnQgaT0xO2k8ODtpKyspewoJCXByZWZpeFtpXT1wcmVmaXhbaS0xXSthcnIxW2ktMV07Cgl9CglpbnQgY291bnQ9MDsKCWZvcihpbnQgaT0xO2k8ODtpKyspewoJCWZvcihpbnQgaj0wO2o8PWk7aisrKXsKCQkJIGlmKHByZWZpeFtpXS1rPT1wcmVmaXhbal0pewoJCQkJY291bnQrKzsKCQkJCWNvdXQ8PGo8PCIgICAgIjw8aS0xPDxlbmRsOwoJCQkgfS8vIGh1bWUgeWUgdG8gcGF0YSBoYWkga2kgc3VtID09ayB0byBob2dhIHN1YmFycmF5IGthCgkJCXRvdGFsc3ViYXJyYXlzKys7CgkJfQoJfQoJY291dDw8dG90YWxzdWJhcnJheXM8PGVuZGw7Cgljb3V0PDxjb3VudDw8ZW5kbDsKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCglyZXR1cm4gMDsKfQ==