求助,WA 40pts
查看原帖
求助,WA 40pts
153546
luyiming楼主2020/9/12 20:14
#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 5;
int n, m;
int a[N];
int b[N];
int vis[N], cnt[N];
int res;
int ans[N];
struct node
{
    int l, r;
    int soc;
} q[N];
int len;

int belong(int x)
{
    return (x - 1) / len + 1;
}

bool compare(struct node x, struct node y)
{
    return (belong(x.l) ^ belong(y.l)) ? belong(x.l) < belong(y.l) : ((belong(x.l) & 1) ? x.r < y.r : x.r > y.r);
}

void Add(int x)
{
    cnt[vis[x]]--;
    cnt[++vis[x]]++;
    res = max(res, vis[x]);
    return;
}

void Del(int x)
{
    if (vis[x] == res && cnt[vis[x]] == 1)
        res--;
    cnt[vis[x]]--;
    cnt[--vis[x]]++;
    return;
}

int main(void)
{
    
    scanf("%d%d", &n, &m);
    len = sqrt(n);
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &a[i]);
        b[i] = a[i];
    }
    sort(b + 1, b + n + 1);
    int Len = unique(b + 1, b + n + 1) - b - 1;
    for (int i = 1; i <= n; i++)
    {
        a[i] = lower_bound(b + 1, b + Len + 1, a[i]) - b;
    }
    for (int i = 1; i <= m; i++)
    {
        scanf("%d%d", &q[i].l, &q[i].r);
        q[i].soc = i;
    }
    sort(q + 1, q + m + 1, compare);
    int L = 1, R = 0;
    for (int i = 1; i <= m; i++)
    {

        while (q[i].l > L)
            Del(a[L++]);
        while (q[i].r < R)
            Del(a[R--]);
        while (q[i].l < L)
            Add(a[--L]);
        while (q[i].r > R)
            Add(a[++R]);
        ans[q[i].soc] = res;
    }
    for (int i = 1; i <= m; i++)
    {
        printf("%d\n", -1 * ans[i]);
    }
    return 0;
}

而且我本机好像是对的?

2020/9/12 20:14
加载中...