当前位置: 首页 > news >正文

P3988 [SHOI2013] 发牌

Solution

容易发现,答案就是维护当前序列的第 k 大值,而且只有删除,这个时候就可以使用权值线段树来维护。这颗树的每一个叶子表示一张牌,然后线段树记录改节点为根的子树的节点个数,接着进行查询即可,代码见下:

Code

#include <bits/stdc++.h>
#define ls(x) x << 1
#define rs(x) x << 1 | 1
#define IOS ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
using namespace std;
typedef long long ll;
struct SGT
{vector<int> tree;SGT(){}SGT(int n){tree.resize(n << 2);build(1, 1, n);}void build(int u, int l, int r){if(l == r){tree[u] = 1;return;}int mid = l + r >> 1;build(ls(u), l, mid), build(rs(u), mid + 1, r);pushup(u);return;}void pushup(int u){tree[u] = tree[ls(u)] + tree[rs(u)];return;}int query(int q, int u, int l, int r){tree[u] --;if(l == r) return l;int mid = l + r >> 1;if(q <= tree[ls(u)]) return query(q, ls(u), l, mid);else return query(q - tree[ls(u)], rs(u), mid + 1, r);}
};
int n, tmp, now;
int main() 
{IOS;cin >> n;SGT sgtree(n);for(int i = 1; i <= n; i ++){cin >> tmp;now = (now + tmp) % (n - i + 1);cout << sgtree.query(now + 1, 1, 1, n) << "\n";}return 0;
}
http://www.jsqmd.com/news/25040/

相关文章:

  • 映射
  • 文件夹显示绿色成功图标方法
  • 正点原子--手把手教你轻松入门C语言及STM32
  • 【RabbitMQ】与ASP.NET Core集成
  • IMO2025 Problem 1
  • Day6综合案例2-注册信息
  • 2014吉林省赛题解 | CCUT应用OJ——Sign in
  • 访答知识库-可以本地使用的知识库
  • 代码大全2 第三四章
  • https代理服务器(六)再次java动态签发【成功】
  • node
  • [AGC032D] Rotation Sort 题解
  • [AGC024E] Sequence Growing Hard 题解
  • 实验2 现代C++编程初体验
  • P7154 [USACO20DEC] Sleeping Cows P 题解
  • Java流程控制——switch多选择结构
  • P3607 [USACO17JAN] Subsequence Reversal P 题解
  • 概率论测试(上)
  • 示性函数2
  • 随笔/杂记
  • k3s 基础 —— 将 traefik 替换为 ingress-nginx
  • 使用 Swift 解析验证码(结合 Tesseract OCR)
  • 常见排序算法Java实现
  • 题解:qoj1875 Nein
  • 【uni-app】申请高德地图key,封装map.js,实现H5、iOS、Android通过getlocation获取地图定位信息(摘)
  • .NET开发上手Microsoft Agent Framework(一)从开发一个AI美女聊天群组开始
  • java作业4
  • 10/28
  • 大学四年的学费/生活费自足攻略
  • 175天 隧道技术篇防火墙组策略FRPNPSChiselSocks代理端口映射C2上线