美团4.1春招笔试编程题

第一题:排列一个数组,使得两两差值的绝对值和最小

贪心,数组排序之后,相邻两两相减,注意答案可能会爆int,开long long。

第二题:有一组展品,每个展品有价值,一共进行m次操作,操作为0时修改展品价值,操作为1时查看展品价值和

使用树状数组,抽象出问题模型就是一个单点修改、区间查询的模板。

#include <bits/stdc++.h>

using i64 = long long;

const int N = 50010;

int n, m;
int o[N], tr[N];
std::pair<int, int> p[N];

void add(int x, int k) {
  for (int i = x; i <= n; i += i & -i) {
    tr[i] += k;
  }
}

i64 sum(int x) {
  i64 ret = 0;
  for (int i = x; i; i -= i & -i) {
    ret += tr[i];
  }
  return ret;
}

int main() {
  std::ios::sync_with_stdio(0);
  std::cin.tie(nullptr);
  
  std::cin >> n >> m;
  for (int i = 0; i < m; i++) {
    std::cin >> o[i];
  }
  for (int i = 0; i < m; i++) {
    std::cin >> p[i].first;
  }
  for (int i = 0; i < m; i++) {
    std::cin >> p[i].second;
  }
  
  std::vector<i64> ans;
  for (int i = 0; i < m; i++) {
    if (o[i] == 0) {
      add(p[i].first, -(sum(p[i].first) - sum(p[i].first - 1)));
      add(p[i].first, p[i].second);
    } else {
      ans.push_back(sum(p[i].second) - sum(p[i].first - 1));
    }
  }
  
  for (int i = 0; i < ans.size(); i++) {
    std::cout << ans[i] << " \n"[i == ans.size() - 1];
  }
  
  return 0;
}

全部评论
还好只靠两题。
点赞 回复 分享
发布于 2023-04-02 20:12 山东
编程题难还是算法题难?
点赞 回复 分享
发布于 2023-04-02 20:18 吉林

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
10-21 23:48
蚌埠坦克学院
csgq:可能没hc了 昨天一面完秒挂
点赞 评论 收藏
分享
点赞 2 评论
分享
牛客网
牛客企业服务