洛谷P2082 区间覆盖(加强版)(珂朵莉树)
传送门
虽然是黄题而且还是一波离散就能解决的东西
然而珂朵莉树还是很好用
相当于一开始区间全为0,然后每一次区间赋值,问最后总权值
珂朵莉树搞一搞就好了
1 //minamoto 2 #include<set> 3 #include<iostream> 4 #include<cstdio> 5 #define ll long long 6 #define IT set<node>::iterator 7 using std::set; 8 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) 9 char buf[1<<21],*p1=buf,*p2=buf; 10 ll read(){ 11 #define num ch-'0' 12 char ch;bool flag=0;ll res; 13 while(!isdigit(ch=getc())) 14 (ch=='-')&&(flag=true); 15 for(res=num;isdigit(ch=getc());res=res*10+num); 16 (flag)&&(res=-res); 17 #undef num 18 return res; 19 } 20 struct node{ 21 ll l,r;mutable int v; 22 node(ll L,ll R=-1,int V=0):l(L),r(R),v(V){} 23 inline bool operator <(const node &b)const 24 {return l<b.l;} 25 };set<node> s; 26 IT split(ll pos){ 27 IT it=s.lower_bound(node(pos)); 28 if(it!=s.end()&&it->l==pos) return it; 29 --it;int l=it->l,r=it->r;ll v=it->v; 30 s.erase(it),s.insert(node(l,pos-1,v)); 31 return s.insert(node(pos,r,v)).first; 32 } 33 void assign(ll l,ll r){ 34 IT itr=split(r+1),itl=split(l); 35 s.erase(itl,itr),s.insert(node(l,r,1)); 36 } 37 ll sum(ll l,ll r){ 38 IT itr=split(r+1),itl=split(l);ll res=0; 39 for(;itl!=itr;++itl) res+=itl->v?itl->r-itl->l+1:0; 40 return res; 41 } 42 int main(){ 43 // freopen("testdata.in","r",stdin); 44 int n=read();s.insert(node(0,1e17+5,0)); 45 while(n--){ 46 ll l=read(),r=read();assign(l,r); 47 } 48 printf("%lld\n",sum(0,1e17)); 49 return 0; 50 }
转载于:https://www.cnblogs.com/bztMinamoto/p/9811220.html
洛谷P2082 区间覆盖(加强版)(珂朵莉树)相关推荐
- 洛谷P3987 我永远喜欢珂朵莉~ 树状数组+vector(暴力)
题目链接:我永远喜欢珂朵莉- 在太阳西斜的这个世界里,置身天上之森.等这场战争结束之后,不归之人与望眼欲穿的众人, 人人本着正义之名,长存不灭的过去.逐渐消逝的未来.我回来了,纵使日薄西山,即便看不到 ...
- 洛谷P3987 我永远喜欢珂朵莉~(set 树状数组)
题意 题目链接 Sol 不会卡常,自愧不如.下面的代码只有66分.我实在懒得手写平衡树了.. 思路比较直观:拿个set维护每个数出现的位置,再写个线段树维护区间和 #include<bits/s ...
- 我的算法不可能这么简单—珂朵莉树
文章目录 进入正题 珂朵莉树的起源 题目简述 题目分析 珂朵莉树的实现 萌新三连 1.明明查询的右端点是12,但是要split(13)呢? 2.为什么要先分裂右端点,然后再分裂左端点呢? 3.获取到区 ...
- [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解
参考资料: Chtholly Tree (珂朵莉树) (应某毒瘤要求,删除链接,需要者自行去Bilibili搜索) 毒瘤数据结构之珂朵莉树 在全是珂学家的珂谷,你却不知道珂朵莉树?来跟诗乃一起学习珂朵 ...
- 一种黑科技:珂朵莉树
首先要明白的是:珂朵莉树(ODT)是一种用来骗分的暴力数据结构. 珂朵莉树的思想是利用集合set,把相同且连续的元素合并为一个个区间,从而进行区间修改:因此,珂朵莉树是区间的集合,这点可以通过定义结构 ...
- 浅谈珂朵莉树(ODT)
前言 珂学家狂喜( 文章目录 前言 一.珂朵莉树来源 二.珂朵莉树 1.珂朵莉树有什么用? 2.原理是什么? a.存储 b.分割结点 c.推平 d.剩余操作 3.复杂度分析 三.珂朵莉树例题 1.P4 ...
- 浅谈珂朵莉树(Chtholly Tree)——暴力而玄学的数据结构
关于它很珂学的名字- 珂朵莉树(Chtholly Tree),又称老司机树(Old Driver Tree),起源于CodeFoeces平台上编号为896C的一道题-- " Willem, ...
- 珂朵莉树(永远喜欢珂朵莉/doge)
目录 前言 可能用到前置知识 背景 构建珂朵莉树 核心函数 珂朵莉树在实际题目使用 对珂朵莉树的一些感想 最后的最后 前言 最近刚刚学内容大概是借鉴的吧,感觉这个数据结构不仅简单,还很强,有着非常柯学 ...
- 数据结构 【树状数组】【线段树】【珂朵莉树】
一.区间合并 1.AcWing245你能回答这些问题吗 分析: 线段树.维护四个变量,即可实现区间合并. mx 区间最大连续子段和 mx_l 以区间左端点为左界的最大连续字段和 mx_r 以区间左端点 ...
- CodeForces - 897E Willem, Chtholly and Seniorious(珂朵莉树)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,现在需要执行 mmm 次操作,每次操作分为下列四种情况: 1lrx1 \ l \ r \ x1 l r x:[l,r][l,r][l,r] ...
最新文章
- Socket编程(C语言实现)—— AF_INET(典型的TCP/IP四层模型的通信过程),AF_UNIX(本地进程间通信)
- .Net Micro Framework研究—TCP/IP通信
- Exchange 2016部署实施案例篇-04.Ex基础配置篇(下)
- /*携程面试*/四个数组,都已经排好序,找出四个数组的交集
- oracle 错误码1438,一次ora-01438错误的处理
- 字典树实现_trie 字典树的实现方法
- MySQL影院管理系统_数据库三级项目(电影院管理系统)
- 抽奖活动mysql表设计_抽奖项目的系统设计方案
- 小型电商平台系统需求分析文档
- Airbnb房源信息爬取(二)——获取房源信息
- 安卓系统手机如何用作电脑摄像头使用及解决方法
- 自学python能干什么知乎_自学python能干什么
- DirectX12(D3D12)基础教程(六)——多线程渲染
- 如何判断是否适合学编程?
- 腾讯手游助手修改共享目录/缓存目录/Temp文件夹路径
- SharePoint Server 2007 简体中文下载
- DB2 HADR TSA安装
- L1-036 A乘以B Python
- 又双叒叕找不到图了?UI设计师独家分享年度十大高清图片网站
- 蓝桥试题集-基础练习-BASIC-18~21-矩阵面积交-完美的代价-数的读法-Sine之舞
热门文章
- Oracle listagg去重distinct三种方法总结
- Java创建多线程的方法总结
- 动态规划(Dynamic Programming)理论篇
- 冒泡排序(C#)实现
- 2gt;MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _calloc 已经在 LIBCMTD.lib(dbgcalloc.obj) 中定义...
- scikit-learn:在实际项目中用到过的知识点(总结)
- Firefox 网页 光标 闪烁
- codereviw得到的一些经验
- WinForm编程开发实用技巧14则(转)
- 分享Android开发的一些工具