Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define forn(l, r) for(int i = l; i < (r); ++i)
- #define TAM 1000100
- #define SYNC ios::sync_with_stdio(0);
- #define $ << ' ' <<
- #define F first
- #define S second
- #define endl << '\n'
- using namespace std;
- using ll = long long int;
- using ii = pair<int, int>;
- using vii = vector<ii>;
- using vi = vector<int>;
- using graph = vector<vi>;
- const int INF = 0x3f3f3f3f;
- const int MAXN = 112345;
- const ll mod = 1000000007;
- int sum[TAM], san[TAM];
- int sufixsum[TAM];
- int bin_search(int l, int r, int val) {
- int mid = 0;
- while (l <= r) {
- if (sum[(l+r)/2] >= val) {
- mid = (l+r)/2;
- r = mid-1;
- } else {
- l = (l+r)/2+1;
- }
- }
- return sum[mid] == val ? mid : -1;
- }
- int main() {
- SYNC
- int n, d, pairs = 0, soma=0;
- cin >> n >> d;
- forn (0, n) {
- cin >> san[i];
- soma += san[i];
- sum[i] = soma;
- }
- soma = 0;
- for (int i = n-1; i >= 0; --i) {
- soma += san[i];
- sufixsum[i] = soma;
- }
- forn (0, n) {
- if (!i) {
- if(bin_search(i, n-1, d)+1) {
- pairs++;
- }
- } else {
- if(bin_search(i, n-1, d+sum[i-1])+1) {
- pairs++;
- }
- }
- }
- for (int i = n-1; i > 0; --i) {
- if (bin_search(0, i-1, d-sufixsum[i])+1) {
- pairs++;
- }
- }
- cout << pairs endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment