牛客竞赛 1014 双指针

思路

针对边界问题还是容易错

以后如果能维护闭区间就维护闭区间 , 对于到达下一个状态才能知道当前状态最优的情况也更好考虑

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long int
inline int read() {
    int ans = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-')f = -1;
        ch = getchar();
    }
    while (ch <= '9' && ch >= '0') {
        ans = ans * 10 + ch - '0';
        ch = getchar();
    }
    return ans * f;
}
const int N = 2e5+10;
struct Item {
    int pos,num,id;
    bool operator<(const Item &x) const {
        return pos < x.pos;
    }
};
Item a[N];
signed main() {
    int n= read();
    int sum = 0;
    for (int i =1; i<= n; i++) a[i].pos =read();
    for (int i =1; i<= n; i++) {
        a[i].num=read();
        sum+=a[i].num;
        a[i].id = i;
    }
    int cur = 0;
    sort(a+1,a+1+n);
    for (int i = 1; i<= n; i++) {
        cur +=a[i].num;
        if (cur*2 > sum) {
            cout<<a[i].id<<"\n";
            return 0;
        }
    }
    return 0;
}

posted @ 2025-06-19 10:02  Guaninf  阅读(7)  评论(0)    收藏  举报