首页 > 其他分享 >2023 年 CCPC 网络预选赛 L.Partially Free Meal (主席树)

2023 年 CCPC 网络预选赛 L.Partially Free Meal (主席树)

时间:2023-10-27 09:24:02浏览次数:37  
标签:cnt return nums int tr mid Free CCPC 2023

传送门

先插个图玩云顶之弈。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
 
#define ll long long
#define fs first
#define se second

const long double eps = 1e-9;
const int N = 2e5 + 10, M = 2e5 + 10;
const int MOD = 1e9 + 7;
const ll INF = 0x3f3f3f3f3f3f3f3f;
int n , m, _;

std::vector<int> nums;

struct node{
	int l, r, cnt;
	ll sum;
}tr[N * 21];
/
struct Historical_Segment_Tree{
	int idx;
	int root[N];
	
	inline int build(int l, int r){
		int q = ++ idx;
		if(l == r)	return q;
		int mid = l + r >> 1;
		tr[q].l = build(l, mid);//存的是左儿子的编号并非边界
		tr[q].r = build(mid + 1, r);
		return q;
	}

	inline int insert(int p, int l, int r, int x, int sum){//需要用到的上一个版本root[i - 1](返回的值是当前版本的root)
		int q = ++ idx;
		tr[q] = tr[p];//复制上一个节点的信息
		if(l == r){
			tr[q].cnt += sum;//新版本的信息加1
			tr[q].sum += nums[x];
			return q;
		}
		int mid = l + r >> 1;
		if(x <= mid)	tr[q].l = insert(tr[p].l, l, mid, x, sum);//在左子树则需要更新信息,否则保留原本信息就可以
		else tr[q].r = insert(tr[p].r, mid + 1, r, x, sum);
		tr[q].cnt = tr[tr[q].l].cnt + tr[tr[q].r].cnt;
		tr[q].sum = tr[tr[q].l].sum + tr[tr[q].r].sum;
		return q;
	}

	inline int query(int p, int q, int L, int R, int l, int r){
		if(L >= l && R <= r)	return tr[q].cnt - tr[p].cnt;
		int mid = L + R >> 1;
		int cnt = 0;
		if(l <= mid)	cnt += query(tr[p].l, tr[q].l, L, mid, l, r);
		if(r > mid)		cnt += query(tr[p].r, tr[q].r, mid + 1, R, l, r);
		return cnt;
	}

	inline ll query(int p, int q, int l, int r, int k){//区间k小
		if(l == r)		return 1ll * nums[l] * k;
		int mid = l + r >> 1;
		int cnt = tr[tr[q].l].cnt - tr[tr[p].l].cnt;
		if(cnt >= k)	return query(tr[p].l, tr[q].l, l, mid, k);
		return tr[tr[q].l].sum + query(tr[p].r, tr[q].r, mid + 1, r, k - cnt);
	}
}HST;

struct NODE {
	int a, b;
	
	bool operator < (const NODE &x) const {
		return this->b < x.b;
	}
}t[N];

ll ans[N];
auto &root = HST.root;
inline void Solution(int xl, int xr, int yl,int yr) {
	if (xl > xr) return ;
	int mid = xl + xr >> 1;
	int tmp = 0;
	ll tans = INF;
	for (int i = std::max(mid, yl); i <= yr; i ++) {
		ll now = HST.query(root[0], root[i], 0, nums.size() - 1, mid);
		now += t[i].b;
		if (now < tans) {
			tans = now;
			tmp = i;
		}
	}
	ans[mid] = tans;
	Solution(xl, mid - 1, yl, tmp), Solution(mid + 1, xr, tmp, yr);
}


inline void solve(){
	std::cin >> n;
	

	for (int i = 1; i <= n; i ++) {
		std::cin >> t[i].a >> t[i].b;
		nums.push_back(t[i].a);
	}
	
	std::sort(t + 1, t + n + 1);
	std::sort(nums.begin(), nums.end());
	
	nums.erase(std::unique(nums.begin(), nums.end()), nums.end());

	
	root[0] = HST.build(0, nums.size() - 1);
	
	for (int i = 1; i <= n; i ++) {
		int pos = std::lower_bound(nums.begin(), nums.end(), t[i].a) - nums.begin();
		root[i] = HST.insert(root[i - 1], 0, nums.size() - 1, pos, 1);
	}
	
	Solution(1, n, 1, n);
	
	for (int i = 1; i <= n; i ++) std::cout << ans[i] << '\n';
}

signed main(void){
   	

	_ = 1;
   	//std::cin >> _;
	while(_ --)
    	solve();

    return 0;
}

标签:cnt,return,nums,int,tr,mid,Free,CCPC,2023
From: https://www.cnblogs.com/qdhys/p/17790386.html

相关文章

  • 2023-10-26 hexo部署到GitHub时css样式不生效 ==》 css文件链接被识别为不安全链接,导
    hexod一键部署后查看效果发现博客页面的样式全丢失了,查看控制台发现了端倪:MixedContent:Thepageat'https://xxx.github.io/'wasloadedoverHTTPS,butrequestedaninsecurestylesheet'http://xxx.com/lib/font-awesome/css/font-awesome.min.css?v=4.6.2'.Thisre......
  • 2023年10月26日阅读笔记
    《代码整洁之道》这是一本关于编程和代码维护的经典之作。通过对这本书的阅读,我深入了解了如何编写清晰、易读、易维护的代码,以及如何通过良好的编程习惯和原则来提高代码质量和效率。再加上我本身是一个强迫症,非常注重代码的整洁和规范,所以对于这本书的阅读兴趣也十分高涨。首......
  • 2023 10.26 初识计算机
    什么是计算机由硬件软件组成科学计算数据处理硬件计算机运行的基本原理由输入设备(键盘鼠标)发布命令—CPU计算处理数据的结果—放到内存(通过媒介主板)—然后通过输出设备(显示器)(当然需要电源供电,显卡提高显示精度)CPU里面包含运算器+控制器,运算器计算结果反馈内存,控......
  • 20231026打卡·
    上午的课程是算法与数据结构中的图。图是一种非常重要的数据结构,用于描述事物之间的关系和连接。在这门课上,我们学习了图的基本概念、表示方法以及常见的图算法。通过理论讲解和实践编程练习,我对图的理解和应用有了更深入的认识。图算法对于解决许多实际问题都非常有用,我会在日常......
  • 2023.10.26
    1、CSV以纯文本形式存储数字和文本数据,以换行符间隔多条记录2、软件实现数据持久性的最基本途径是文件和数据库3、影响应用程序选择数据的存储、管理和处理方式的因素包括共享与传输、数据的持久性和使用频次、数据的量及管理、数据的操作方式4、Java字节流操作的基础类是Out......
  • 2023.10.26——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.软件需求分析及C#明日计划:学习......
  • HUSTFC 2023游记+补题
    前情提要:好好好,我退役后又复活了和两位Cu大佬组了个队打暑假多校,然后ICPC网络赛被薄纱了两场为了奖品HUST唯一的新生ICPC名额打的新生赛还拉了个高中的无辜同学来接受阿克曼的制裁,我有罪比赛:开场开到了K,进行一个莫名其妙的拼手速,4min过了,但是输了几秒没拿到一血然后看榜有......
  • NOIP2023模拟3联测24-博弈树
    NOIP2023模拟3联测24-博弈树目录NOIP2023模拟3联测24-博弈树题目大意思路code题目大意\(Alice\)和\(Bob\)又开始玩游戏了:给定一颗\(n\)个节点的树,\(Alice\)和\(Bob\)随机选择一个节点作为起点放上棋子,由Alice先手。轮到一方后可以将这颗棋子移动到树上任意一点,每次......
  • 2023-2024 20231313《计算机基础与程序设计》第五周学习总结
    2023-202420231313《计算机基础与程序设计》第五周学习总结作业速达作业课程班级链接作业要求计算机基础与程序设计第五周学习总结作业内容计算机科学概论第6章、《C语言程序设计》第4章并完成云班课测试————>Pep/9虚拟机、机器语言与汇编语言、算法与伪......
  • 2023-10-26 无法访问此网站网址为 http://xxx.yy.com/ 的网页可能暂时无法连接,或者它
    新购一域名,并添加了解析,保存后若干分钟访问该域名,报错显示:原因,我给域名添加的解析地址不正确,所以导致无法找到该服务器,故而报错。看到圈中的【记录值】了吗,这里应该填你的服务器公网ip,如果填错了就无法访问。解决方案,前往你的服务器管理后台,找到域名解析的地方,重新修改解析地......