daimayuan 代码源大富翁游戏

简介: daimayuan 代码源大富翁游戏

线段树基础题,动态在线维护区间最大值和最小值,一发过

具体看注释:

/*********************************************************************
    程序名:
    版权: Joecai
    作者: Joecai
    日期: 2022-04-06 14:55
    说明:
*********************************************************************/
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
# define rep(i,be,en) for(int i=be;i<=en;i++)
# define pre(i,be,en) for(int i=be;i>=en;i--)
typedef pair<int, int> PII;
#define ll long long
#define endl "\n"
#define LOCAL
#define pb push_back
#define eb emplace_back
#define sp(i) setprecision(i)
const int N = 1e6 + 10, INF = 0x3f3f3f3f;
struct node
{
  int l;//区间左端点
  int r;//区间右端点
  int mi;//区间最小值
  int mx;//区间最大值
} tr[N << 2];
int a[N];
void init(int n)
{
  for (int i = 1; i <= n; i++)
  {
    a[i] = 100;
  }
}
void pushup(int u)//传递子树对父亲的影响
{
  tr[u].mi = min(tr[u << 1].mi, tr[u * 2 + 1].mi);//维护区间最小值
  tr[u].mx = max(tr[u << 1].mx, tr[u << 1 | 1].mx);//维护区间最小值
}
void build(int u, int l, int r)//构建线段树
{
  tr[u] = {l, r};
  if (l == r)
  {
    tr[u].mx = a[r];
    tr[u].mi = a[r];
    return;
  }
  int mid = l + r >> 1;
  build(u << 1, l, mid);
  build(u << 1 | 1, mid + 1, r);
  pushup(u);
}
void add(int u, int p, int x)//直接单点修改
{
  if (tr[u].l == tr[u].r)
  {
    if (tr[u].l == p)
    {
      tr[u].mi += x;
      tr[u].mx += x;
    }
    return;
  }
  int mid = tr[u].l + tr[u].r >> 1;
  if (p <= mid) add(u << 1, p, x);
  else add(u << 1 | 1, p, x);
  pushup(u);
}
int querymi(int u, int l, int r)//直接传递1-n的最小值
{
  return tr[u].mi;
}
int querymx(int u, int l, int r)//直接传递1-n,的最大值
{
  return tr[u].mx;
}
void solve()
{
  int n, m;
  cin >> n >> m;
  init(n);
  build(1, 1, n);
  for (int i = 1; i <= m; i++)
  {
    int t;
    cin >> t;
    if (t == 1)
    {
      int p, x;
      cin >> p >> x;
      a[p] += x;
      add(1, p, x);
    } else
    {
      cout << querymx(1, 1, n) << ' ' << querymi(1, 1, n) << endl;
    }
  }
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  //#ifdef LOCAL
  //freopen("data.in.txt","r",stdin);
  //freopen("data.out.txt","w",stdout);
  //#endif
  int __ = 1;
  //cin>>__;
  while (__--)
  {
    solve();
  }
  return 0;
}

点个赞再走叭~

目录
相关文章
|
编解码 安全 网络协议
实测:游戏情景中,远控软件实力如何?一篇告诉你ToDesk的强大之处
实测:游戏情景中,远控软件实力如何?一篇告诉你ToDesk的强大之处
实测:游戏情景中,远控软件实力如何?一篇告诉你ToDesk的强大之处
|
3月前
|
人工智能 算法 计算机视觉
我的自描外挂制作日志——FPS类游戏的自瞄【构思准备】
我的自描外挂制作日志——FPS类游戏的自瞄【构思准备】
45 0
|
3月前
|
计算机视觉
我的自描外挂制作日志——FPS类游戏的自瞄【验证猜想】
我的自描外挂制作日志——FPS类游戏的自瞄【验证猜想】
26 1
|
8月前
|
Android开发 Windows
汪子熙趣味成语接龙的游戏软件使用文档说明
汪子熙趣味成语接龙的游戏软件使用文档说明
50 0
|
9月前
|
数据采集 人工智能 安全
ChatGPT显示付费墙内容,OpenAI把联网功能关了,网友炸了
ChatGPT显示付费墙内容,OpenAI把联网功能关了,网友炸了
126 0
|
10月前
|
C语言
教你成为比卡卡西还牛逼的全能忍者,全拷贝与分割函数
教你成为比卡卡西还牛逼的全能忍者,全拷贝与分割函数
70 0
|
12月前
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏07游戏输入管理
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏07游戏输入管理
92 0
|
12月前
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏18玩家攻击动画实现
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏18玩家攻击动画实现
130 0
|
12月前
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏02支持中文及显示FPS
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏02支持中文及显示FPS
117 0
|
12月前
|
算法 Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏17敌人自动追踪(自动寻路)
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏17敌人自动追踪(自动寻路)
110 0