#include <bits/stdc++.h>
using namespace std;
int findQudruplets(vector<int> &arr, int k1, int k2){
int n = arr.size(), totalCnt = 0;
if(n < 4){
return 0;
}
vector<int> s(n, 0);
for (int k = 2; k <= n-2; k++){
int idx = upper_bound(arr.begin()+k+1, arr.end(), k2 - arr[k]) - arr.begin();
s[k] = n-idx;
}
vector<int> r(n+1, 0);
for(int k = n-2; k >= 2; k--){
r[k] = r[k+1]+s[k];
}
for (int j = 1; j <= n-3; j++){
int pos = upper_bound(arr.begin(), arr.begin()+j, k1 - arr[j]) - arr.begin();
int leftCnt = (j - pos);
int rightCnt = r[j+1];
totalCnt += leftCnt * rightCnt;
}
return totalCnt;
}
int main() {
// your code goes here
vector<int> arr = {1, 1, 1, 1, 2, 2};
cout << findQudruplets(arr, 1, 3);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZmluZFF1ZHJ1cGxldHModmVjdG9yPGludD4gJmFyciwgaW50IGsxLCBpbnQgazIpewoJaW50IG4gPSBhcnIuc2l6ZSgpLCB0b3RhbENudCA9IDA7CglpZihuIDwgNCl7CgkJcmV0dXJuIDA7Cgl9CgkKCXZlY3RvcjxpbnQ+IHMobiwgMCk7CgkKCWZvciAoaW50IGsgPSAyOyBrIDw9IG4tMjsgaysrKXsKCQlpbnQgaWR4ID0gdXBwZXJfYm91bmQoYXJyLmJlZ2luKCkraysxLCBhcnIuZW5kKCksIGsyIC0gYXJyW2tdKSAtIGFyci5iZWdpbigpOwoJCXNba10gPSBuLWlkeDsKCX0KCQoJdmVjdG9yPGludD4gcihuKzEsIDApOwoJCglmb3IoaW50IGsgPSBuLTI7IGsgPj0gMjsgay0tKXsKCQlyW2tdID0gcltrKzFdK3Nba107IAoJfQoJCglmb3IgKGludCBqID0gMTsgaiA8PSBuLTM7IGorKyl7CgkJCgkJaW50IHBvcyA9IHVwcGVyX2JvdW5kKGFyci5iZWdpbigpLCBhcnIuYmVnaW4oKStqLCBrMSAtIGFycltqXSkgLSBhcnIuYmVnaW4oKTsKCQlpbnQgbGVmdENudCA9IChqIC0gcG9zKTsKCQkKCQlpbnQgcmlnaHRDbnQgPSByW2orMV07CgkJCgkJdG90YWxDbnQgKz0gbGVmdENudCAqIHJpZ2h0Q250OwoJCQoJfQoJCglyZXR1cm4gdG90YWxDbnQ7Cn0KCgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXZlY3RvcjxpbnQ+IGFyciA9IHsxLCAxLCAxLCAxLCAyLCAyfTsKCWNvdXQgPDwgZmluZFF1ZHJ1cGxldHMoYXJyLCAxLCAzKTsKCQoJcmV0dXJuIDA7Cn0=