2369 2023. 01. 11 19:47:43 sztomi Háromszögek cpp11 Elfogadva 40/40 71ms 5372 KiB
#include <bits/stdc++.h>

using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int n, q;
    cin >> n >> q;
    vector<int> a(n);
    for(int i = 0; i < n; i++){
        cin >> a[i];
    }
    sort(a.begin(), a.end());

    int ki = 0;
    int kezd1, veg1, kezd2, veg2;
    bool j1, j2;
    int b, c;
    for(int i = 0; i < q; i++){
        ki = 0;
        j1 = j2 = false;
        cin >> b >> c;
        if(b > c) swap(b, c);
        // legnagyobb olyan a, ahol b+c > a
        veg1 = n-1-int(upper_bound(a.rbegin(), a.rend(), b+c, greater<int>())-a.rbegin());
        // legkisebb olyan a, ahol c <= a
        kezd1 = lower_bound(a.begin(), a.end(), c)-a.begin();
        //cout << kezd1 << " debug " << veg1 << "\n";
        if(0 <= veg1 && veg1 < n && 0 <= kezd1 && kezd1 < n && kezd1 <= veg1){
            j1 = true;
        }

        // legkisebb olyan a, ahol c-b < a
        kezd2 = upper_bound(a.begin(), a.end(), c-b)-a.begin();
        // legnagyobb olyan a, ahol c >= a
        veg2 = n-1-int(lower_bound(a.rbegin(), a.rend(), c, greater<int>())-a.rbegin());
        if(0 <= veg2 && veg2 < n && 0 <= kezd2 && kezd2 < n && kezd2 <= veg2){
            j2 = true;
        }
        if(j1 && j2){
            if(kezd1 <= kezd2 && kezd2 <= veg1){
                if(veg2 <= veg1){
                    ki += veg1-kezd1+1;
                }
                else{
                    ki += veg2-kezd1+1;
                }
            }
            else if(kezd2 <= kezd1 && kezd1 <= veg2){
                if(veg1 <= veg2){
                    ki += veg2-kezd2+1;
                }
                else{
                    ki += veg1-kezd2+1;
                }
            }
            else{
                ki += veg1-kezd1+1;
                ki += veg2-kezd2+1;
            }
        }
        else if(j1){
            ki += veg1-kezd1+1;
        }
        else if(j2){
            ki += veg2-kezd2+1;
        }

        //cout << kezd2 << " debug2 " << veg2 << "\n";
        cout << ki << "\n";
    }

}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 40/40
1 Elfogadva 0/0 3ms 1824 KiB
2 Elfogadva 0/0 2ms 2060 KiB
3 Elfogadva 0/0 7ms 2440 KiB
4 Elfogadva 4/4 3ms 2480 KiB
5 Elfogadva 2/2 3ms 2640 KiB
6 Elfogadva 1/1 64ms 3668 KiB
7 Elfogadva 1/1 43ms 3776 KiB
8 Elfogadva 2/2 43ms 3976 KiB
9 Elfogadva 2/2 43ms 3972 KiB
10 Elfogadva 1/1 61ms 4156 KiB
11 Elfogadva 1/1 59ms 4376 KiB
12 Elfogadva 2/2 61ms 4420 KiB
13 Elfogadva 2/2 61ms 4692 KiB
14 Elfogadva 1/1 68ms 4692 KiB
15 Elfogadva 1/1 59ms 4780 KiB
16 Elfogadva 1/1 59ms 4876 KiB
17 Elfogadva 1/1 46ms 4992 KiB
18 Elfogadva 1/1 43ms 5096 KiB
19 Elfogadva 2/2 43ms 5084 KiB
20 Elfogadva 2/2 45ms 5092 KiB
21 Elfogadva 3/3 46ms 5120 KiB
22 Elfogadva 5/5 63ms 5216 KiB
23 Elfogadva 5/5 71ms 5372 KiB