TLE 40 pts
查看原帖
TLE 40 pts
355510
Lightwhite楼主2021/11/19 20:59
#include <bits/stdc++.h>

using namespace std;

const int kMaxN = 2e5 + 10;

int arr1[kMaxN], arr2[kMaxN], all, ans[kMaxN], cnt1[kMaxN], cnt2[kMaxN], n, m, len;
struct interval {
  int left, right, value, identity;
} inter[kMaxN];
bool compare(interval &x, interval &y) {
	return ((x.value != y.value) ? (x.left < y.left) : ((x.value & 1) ? (x.right < y.right) : (x.right > y.right)));
}

int discret (int x) {
  return lower_bound (arr2 + 1, arr2 + len + 1, x) - arr2 - 1;
}
void add (int now) {
  cnt1[++cnt2[arr1[now]]]++;
  all = max (all, cnt2[arr1[now]]);
}
void del (int now) {
  if (cnt1[cnt2[arr1[now]]] == 1 && cnt2[arr1[now]] == all) {
    all--;
  }
  cnt1[cnt2[arr1[now]]--]--;
}

int main () {
  // ios :: sync_with_stdio (false);
  // cin.tie (0), cout.tie (0);

  // freopen ("std.in", "r", stdin);
  // freopen ("std.out", "w", stdout);

  // cin >> n >> m;
  scanf ("%d %d", &n, &m);
  len = sqrt (n);
  for (int i = 1; i <= n; ++i) {
    // cin >> arr1[i];
    scanf ("%d", &arr1[i]);
    arr2[i] = arr1[i];
  }
  sort (arr2 + 1, arr2 + n + 1);
  len = unique (arr2 + 1, arr2 + n + 1) - arr2 - 1;
  for (int i = 1; i <= n; ++i) {
    arr1[i] = discret (arr1[i]);
  }

  for (int i = 1; i <= m; ++i) {
    inter[i].identity = i;
    // cin >> inter[i].left >> inter[i].right;
    scanf ("%d %d", &inter[i].left, &inter[i].right);
    inter[i].value = (inter[i].left - 1) / len;
  }
  sort (inter + 1, inter + m + 1, compare);

  int left_ = 1, right_ = 0;
  for (int i = 1; i <= m; ++i) {
    while (left_ < inter[i].left) {
      del (left_++);
    }
    while (left_ > inter[i].left) {
      add (--left_);
    }
    while (right_ < inter[i].right) {
      add (++right_);
    }
    while (right_ > inter[i].right) {
      del (right_--);
    }
    ans[inter[i].identity] = all;
  }
  
  // for (int i = 1; i <= m; ++i) {
  //   // cout << '-' << ans[i] << '\n';
  //   printf ("-%d\n", ans[i]);
  // }
  // fclose (stdin);
  // fclose (stdout);

  cerr << (double) clock () / CLOCKS_PER_SEC;
  return 0;
}
2021/11/19 20:59
加载中...