感觉思路对的,求调
查看原帖
感觉思路对的,求调
974277
水星湖psgqwq楼主2024/5/12 22:06
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 5;
int n, m, p, a[N];
string a1, a2;
map<int, int> mp;
signed main()
{
    cin >> n >> m >> p;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        mp[a[i]] = i;
    }
    
    int x = a[p];
    sort(a + 1, a + n + 1);
    int pos = lower_bound(a + 1, a + n + 1, 0) - a;
    
    

    int o, r = -9e18, l = r + 1;
    for(int i = pos; i <= n; i++) {
        if(a[i] < x || x < a[pos]) 
            o = upper_bound(a + 1, a + n + 1, (2*a[i]-m) / 2) - a;
        else 
            o = upper_bound(a + 1, a + n + 1, (2*a[i]-m-5) / 2) - a;

        if(i - o > r - l) 
            r = i, l = o;
    
    }

    if(r != 9e18)
        for(int i = l; i <= r; i++) 
            a1 += to_string(mp[a[i]]) + " ";

    r = 9e18, l = r + 1;
    for(int i = 1; a[i] <= 0; i++) {
        o = -1e18;
        if(a[i] > x || (x >= a[pos] && x != 0) || x > a[pos]) 
            o = upper_bound(a + 1, a + n + 1, (m+2*a[i]) / 2) - a - 1;
        else if(5+m+2*a[i] >= 0)
            o = upper_bound(a + 1, a + n + 1, (5+m+2*a[i]) / 2) - a - 1;

        if(o - i > r - l) 
            r = o, l = i;
    }

    if(r != 9e18)
        for(int i = l; i <= r; i++) 
            a2 += to_string(mp[a[i]])+" ";

    if(a1.size() > a2.size())
        cout << a1.size() / 2 << endl << a1 << endl;
    else if(a2.size() > a1.size())
        cout << a2.size() / 2 << endl << a2 << endl;
    else if(a1 < a2)
        cout << a1.size() / 2 << endl << a1 << endl;
    else
        cout << a2.size() / 2 << endl << a2 << endl;
    return 0;
}
2024/5/12 22:06
加载中...