Submission #56048160


Source Code Expand

#include <random>
#include <algorithm>
#include <bitset>
#include <chrono>
#include <cmath>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <chrono>
#define m_p make_pair
#define all(x) (x).begin(),(x).end()
#define sz(x) ((x).size())
typedef long long ll;
using ull = unsigned long long;
using namespace std;
mt19937 rnd(348502);
ll mod1 = 998244353;
ll mod = 1e9 + 7;
const int N = 200007;


void solve()
{
    int n, i, j, q, x, y, b, k;
    cin >> n >> q;
    vector<int> v;
    for ( i = 0; i < n; i++)
    {
        cin >> x;
        v.push_back(x);
    }
    sort(all(v));
    for ( i = 0; i < q; i++)
    {
        cin >> b >> k;
        int qaq = 0;
        if (v[0] >= b)
        {
            cout << v[k - 1] - b << '\n';
            continue;
        }
        if (v.back() <= b)
        {
            cout << b - v[v.size() - k] << '\n';
            continue;
        }
        int l = 0, r = upper_bound(all(v), b) - v.begin();
        int ll = upper_bound(all(v), b) - v.begin(), rr = n - 1;
        int m, m1, ans = -1;
        while (l <= r)
        {
            m = (l + r) / 2;
            int her = abs(b - v[m]);
            int ans1 = -1;
            int l1 = m, r1 = rr;
            while (l1 <= r1)
            {
                m1 = (l1 + r1) / 2;
                if (abs(v[m1] - b) <= abs(b - v[m]))
                {
                    ans1 = m1;
                    l1 = m1 + 1;
                }
                else
                {
                    r1 = m1 - 1;
                }
            }
            if (abs(m - ans1) + 1 >= k)
            {
                ans = m;
                qaq = ans1;
                l = m + 1;
            }
            else
            {
                r = m - 1;
            }
        }
        if (ans != -1)
        {
            if (ans + k - 1 < v.size() && v[ans + k - 1] == v[qaq])
            {
                cout << abs(v[ans] - b) << '\n';
                continue;
            }
        }
        ll = 0, rr = lower_bound(all(v), b) - v.begin() - 1;
        l = lower_bound(all(v), b) - v.begin() - 1, r = n - 1;
        m, m1, ans = -1;
        qaq = 0;
        while (l <= r)
        {
            m = (l + r) / 2;
            int her = abs(b - v[m]);
            int ans1 = -1;
            int l1 = ll, r1 = m;
            while (l1 <= r1)
            {
                m1 = (l1 + r1) / 2;
                if (abs(v[m1] - b) <= abs(b - v[m]))
                {
                    ans1 = m1;
                    r1 = m1 - 1;
                }
                else
                {
                    l1 = m1 + 1;
                }
            }
            if (abs(m - ans1) + 1 >= k)
            {
                ans = m;
                qaq = ans1;
                r = m - 1;
            }
            else
            {
                l = m + 1;
            }
        }
        cout << abs(v[ans] - b) << '\n';
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int tt = 1;
    //cin >> tt;
    while (tt--) {
        solve();
    }
    return 0;
}

Submission Info

Submission Time
Task D - K-th Nearest
User CyberCow
Language C++ 20 (gcc 12.2)
Score 0
Code Size 3424 Byte
Status WA
Exec Time 222 ms
Memory 3892 KiB

Compile Error

Main.cpp: In function ‘void solve()’:
Main.cpp:63:17: warning: unused variable ‘her’ [-Wunused-variable]
   63 |             int her = abs(b - v[m]);
      |                 ^~~
Main.cpp:92:29: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   92 |             if (ans + k - 1 < v.size() && v[ans + k - 1] == v[qaq])
      |                 ~~~~~~~~~~~~^~~~~~~~~~
Main.cpp:100:9: warning: left operand of comma operator has no effect [-Wunused-value]
  100 |         m, m1, ans = -1;
      |         ^
Main.cpp:100:23: warning: right operand of comma operator has no effect [-Wunused-value]
  100 |         m, m1, ans = -1;
      |                       ^
Main.cpp:105:17: warning: unused variable ‘her’ [-Wunused-variable]
  105 |             int her = abs(b - v[m]);
      |                 ^~~
Main.cpp:34:15: warning: unused variable ‘j’ [-Wunused-variable]
   34 |     int n, i, j, q, x, y, b, k;
      |               ^
Main.cpp:34:24: warning: unused variable ‘y’ [-Wunused-variable]
   34 |     int n, i, j, q, x, y, b, k;
      |                        ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 425
Status
AC × 3
AC × 9
WA × 12
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 02_minmax_00.txt, 02_minmax_01.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 2 ms 3440 KiB
00_sample_01.txt AC 1 ms 3440 KiB
00_sample_02.txt AC 1 ms 3492 KiB
01_random_00.txt WA 54 ms 3724 KiB
01_random_01.txt WA 222 ms 3824 KiB
01_random_02.txt WA 108 ms 3520 KiB
01_random_03.txt WA 222 ms 3752 KiB
01_random_04.txt WA 159 ms 3544 KiB
01_random_05.txt WA 222 ms 3892 KiB
01_random_06.txt AC 27 ms 3732 KiB
01_random_07.txt WA 222 ms 3692 KiB
01_random_08.txt WA 161 ms 3784 KiB
01_random_09.txt WA 222 ms 3776 KiB
01_random_10.txt AC 33 ms 3780 KiB
01_random_11.txt WA 222 ms 3752 KiB
01_random_12.txt WA 173 ms 3544 KiB
01_random_13.txt WA 207 ms 3716 KiB
01_random_14.txt AC 104 ms 3720 KiB
01_random_15.txt AC 167 ms 3732 KiB
02_minmax_00.txt AC 1 ms 3440 KiB
02_minmax_01.txt AC 23 ms 3812 KiB