23692023-01-11 19:47:43sztomiHáromszögekcpp11Elfogadva 40/4071ms5372 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ÖsszpontTesztVerdiktIdőMemória
base40/40
1Elfogadva0/03ms1824 KiB
2Elfogadva0/02ms2060 KiB
3Elfogadva0/07ms2440 KiB
4Elfogadva4/43ms2480 KiB
5Elfogadva2/23ms2640 KiB
6Elfogadva1/164ms3668 KiB
7Elfogadva1/143ms3776 KiB
8Elfogadva2/243ms3976 KiB
9Elfogadva2/243ms3972 KiB
10Elfogadva1/161ms4156 KiB
11Elfogadva1/159ms4376 KiB
12Elfogadva2/261ms4420 KiB
13Elfogadva2/261ms4692 KiB
14Elfogadva1/168ms4692 KiB
15Elfogadva1/159ms4780 KiB
16Elfogadva1/159ms4876 KiB
17Elfogadva1/146ms4992 KiB
18Elfogadva1/143ms5096 KiB
19Elfogadva2/243ms5084 KiB
20Elfogadva2/245ms5092 KiB
21Elfogadva3/346ms5120 KiB
22Elfogadva5/563ms5216 KiB
23Elfogadva5/571ms5372 KiB