首页 > 其他分享 >P2343 宝石管理系统 做题记录

P2343 宝石管理系统 做题记录

时间:2023-01-10 13:44:14浏览次数:41  
标签:宝石 管理系统 int 线段 tr mid P2343 using include

随机跳的。

一眼带修第 \(\text{k}\) 大,平衡树 / 权值线段树 / set 随便搞就行。

set 可能要双 \(\log\),所以没写)

很快啊,权值线段树就 \(\text{A}\) 了。直接跑到最优解第二页。

敲一遍警钟,是由大到小第 \(k\) ,不是由小到大。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <unordered_map>
#define rep(i, a, b) for (int i = (a); i <= (b); i ++ )
#define rop(i, a, b) for (int i = (a); i < (b); i ++ )
#define dep(i, a, b) for (int i = (a); i >= (b); i -- )
#define dop(i, a, b) for (int i = (a); i > (b); i -- )

using namespace std;

using LL = long long;
using PII = pair<int, int>;
using PLL = pair<LL, LL>;

const int N = 100010;
int n, m, w[N];
vector<int> v;
struct Queries {
	int op, v;
}q[N];
unordered_map<int, int> cnt;

int find(int x) {
	return lower_bound(v.begin(), v.end(), x) - v.begin();
}

struct Tree {
	int l, r;
	int sum;
}tr[N << 2];

#define ls u << 1
#define rs u << 1 | 1

void pushup(int u) {
	tr[u].sum = tr[ls].sum + tr[rs].sum;
}
void build(int u, int l, int r) {
	tr[u] = {l, r, 0};
	if (l == r) {
		tr[u].sum = cnt[v[r]];
		return;
	}
	int mid = l + r >> 1;
	build(ls, l, mid), build(rs, mid + 1, r);
	pushup(u);
}

void modify(int u, int x) {
	if (x == tr[u].l && x == tr[u].r) {
		tr[u].sum ++ ;
		return;
	}
	int mid = tr[u].l + tr[u].r >> 1;
	modify(x <= mid ? ls : rs, x);
	pushup(u);
}

int query(int u, int k) {
	if (tr[u].l == tr[u].r) return v[tr[u].l];
	if (tr[rs].sum < k) return query(ls, k - tr[rs].sum);
	else return query(rs, k);
}

int main() {
	scanf("%d%d", &n, &m);
	rep(i, 1, n) scanf("%d", &w[i]);
	rep(i, 1, m) scanf("%d%d", &q[i].op, &q[i].v);
	rep(i, 1, n) v.push_back(w[i]), cnt[w[i]] ++ ;
	rep(i, 1, m) v.push_back(q[i].v);
	sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end());
	// 离散化
  
	build(1, 0, v.size() - 1);
	
	rep(i, 1, m) {
		if (q[i].op == 1) printf("%d\n", query(1, q[i].v));
		else modify(1, find(q[i].v));
	}
	
	return 0;
}

算是板子吧,挺好写的。(为什么块状链表跑的比线段树还快?)

标签:宝石,管理系统,int,线段,tr,mid,P2343,using,include
From: https://www.cnblogs.com/LcyRegister/p/17040067.html

相关文章

  • 【项目源码】基于JavaEE的健康管理系统
    随着网络技术的不断发展,网站的开发与运用变得更加广泛。这次采用java语言SSH框架(Spring,Struts,Hibernate)设计并实现了面向特定群体的健康管理平台。该网站主要有教师饮食管......
  • [项目源码] JavaWeb校园宿舍管理系统
     jsp校园宿舍管理系统源码,采用Servlet+JSP+MySQL。包含数据库文件,界面采用bootstrap,简洁大方。      项目导入eclipse后的目录结构如下: 关注下面公众号,下载源码原......
  • C语言信息工程学院成绩管理系统
    C语言信息工程学院成绩管理系统信息工程学院成绩管理系统的设计与实现一、实训目的通过本次实训,提高学生C语言程序设计和程序调试能力,初步培养学生对软件开发的需求调研......
  • C语言学生管理系统[2023-01-09]
    C语言学生管理系统[2023-01-09]学生管理系统利用数据结构的单链表的框架实现学生管理系统以下功能要求:1)学生个人信息:姓名、学号、专业、性别、年龄、联系方式、成绩。......
  • C语言居民小区水电费管理系统[2023-01-09]
    C语言居民小区水电费管理系统[2023-01-09]居民小区水电费管理系统【问题详述】居民小区水电费管理系统可以对居民小区的用水、用电情况及应交费用进行查询与管理。物业......
  • C语言图书信息管理系统[2023-01-08]
    C语言图书信息管理系统[2023-01-08]3、图书信息管理系统(1)图书基本信息包括:分类号、图书编号、书名、作者、出版日期、ISBN、定价、馆藏数、借阅数等。(2)通过菜单选择......
  • C++教学创新大赛信息管理系统[2023-01-08]
    C++教学创新大赛信息管理系统[2023-01-08]2022级《计算思维综合实践I》课程任务书及相关要求适用班级:计算机类2022级、大数据2022级、人工智能2022级一、课程目标1.【......
  • 教务管理系统建设
    一、设计理念   以师生服务为中心:从以教师为中心向以学生为中心。   全面适配教学改革:从教学事务管理向人才培养全过程服务转变。  智能大数据:从经验主义依......
  • java食堂库存管理系统源码
    简介Java基于sprinboot开发的食堂库存管理系统,用于统计食堂库存的,包含采购、入库、出库、折损等功能。演示视频https://www.bilibili.com/video/BV1Jf4y1C7vq/?share_s......
  • 基于MFC的学生成绩管理系统
    1.基本功能演示​1.1软件登陆界面​为实现多账户的登陆方式,故采用了标签页组合的方式,每个分页面指向一个登录窗口。​1.2学生界面​学生界面所需要的功能为课程分数查询,功能......