请教用c++的vector如何实现(如图有时间限制哦)

题目截图如下:

img

img


本人第一次写数据结构代码,不知道如何用vector解决问题。目前(超时代码)如下:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int n, m;
    cin >> n >> m;
    int* a = new int[n];
    int* b = new int[n];
    int* x = new int[m];
    int* y = new int[m];
    for (int i = 0;i < n;i++)
    {
        cin >> a[i] >> b[i];
    }
    for (int i = 0;i < m;i++)
    {
        cin >> x[i] >> y[i];
    }
    for (int i = 0;i < m;i++)
    {
        int lo=0, hi=n;
        while (1 < hi-lo)
        {
            int mi = (hi + lo) >> 2;
            long long int t;
            t = (long long)b[mi] * (long long)x[i] + (long long)a[mi] * (long long)y[i] - (long long)a[mi] * (long long)b[mi];
            if (t >= 0)
                lo = mi + 1;
            else
                hi = mi;
        }
        long long int t;
        t = (long long)b[lo] * (long long)x[i] + (long long)a[lo] * (long long)y[i] - (long long)a[lo] * (long long)b[lo];
        if (t >= 0)
            cout << lo + 1 << endl;
        else
            cout << lo << endl;
    }
    delete []a, b, x, y;
    return 0;
}

没必要动态数组,你改用全局变量,int a[200000]这样,快点,最多空间应该用到0.76MB,没有超;每次动态数组申请浪费时间

试试这个:

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main() {
    int n, m;
    scanf("%d%d", &n, &m);
    int* a = new int[n];
    int* b = new int[n];
    int* x = new int[m];
    int* y = new int[m];
    for (int i = 0; i < n; i++) {
        scanf("%d%d", &a[i], &b[i]);
    }
    for (int i = 0; i < m; i++) {
        scanf("%d%d", &x[i], &y[i]);
    }
    for (int i = 0; i < m; i++) {
        int lo = 0, hi = n;
        while (1 < hi - lo) {
            int mi = (hi + lo) >> 2;
            long long int t;
            t = (long long)b[mi] * (long long)x[i] + (long long)a[mi] * (long long)y[i] - (long long)a[mi] * (long long)b[mi];
            if (t >= 0)
                lo = mi + 1;
            else
                hi = mi;
        }
        long long int t;
        t = (long long)b[lo] * (long long)x[i] + (long long)a[lo] * (long long)y[i] - (long long)a[lo] * (long long)b[lo];
        if (t >= 0)
            printf("%d\n", lo + 1);
        else
            printf("%d\n", lo);
    }
    return 0;
}

vector的,其实定义完之后一样当数组用的

#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
using namespace std;
int main() {
    int n, m;
    scanf("%d%d", &n, &m);
    vector<int> a(n);
    vector<int> b(n);
    vector<int> x(m);
    vector<int> y(m);
    for (int i = 0; i < n; i++) {
        scanf("%d%d", &a[i], &b[i]);
    }
    for (int i = 0; i < m; i++) {
        scanf("%d%d", &x[i], &y[i]);
    }
    for (int i = 0; i < m; i++) {
        int lo = 0, hi = n;
        while (1 < hi - lo) {
            int mi = (hi + lo) >> 2;
            long long int t;
            t = (long long)b[mi] * (long long)x[i] + (long long)a[mi] * (long long)y[i] - (long long)a[mi] * (long long)b[mi];
            if (t >= 0)
                lo = mi + 1;
            else
                hi = mi;
        }
        long long int t;
        t = (long long)b[lo] * (long long)x[i] + (long long)a[lo] * (long long)y[i] - (long long)a[lo] * (long long)b[lo];
        if (t >= 0)
            printf("%d\n", lo + 1);
        else
            printf("%d\n", lo);
    }
    return 0;
}