传送门

虽然是黄题而且还是一波离散就能解决的东西

然而珂朵莉树还是很好用

相当于一开始区间全为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 区间覆盖(加强版)(珂朵莉树)相关推荐

  1. 洛谷P3987 我永远喜欢珂朵莉~ 树状数组+vector(暴力)

    题目链接:我永远喜欢珂朵莉- 在太阳西斜的这个世界里,置身天上之森.等这场战争结束之后,不归之人与望眼欲穿的众人, 人人本着正义之名,长存不灭的过去.逐渐消逝的未来.我回来了,纵使日薄西山,即便看不到 ...

  2. 洛谷P3987 我永远喜欢珂朵莉~(set 树状数组)

    题意 题目链接 Sol 不会卡常,自愧不如.下面的代码只有66分.我实在懒得手写平衡树了.. 思路比较直观:拿个set维护每个数出现的位置,再写个线段树维护区间和 #include<bits/s ...

  3. 我的算法不可能这么简单—珂朵莉树

    文章目录 进入正题 珂朵莉树的起源 题目简述 题目分析 珂朵莉树的实现 萌新三连 1.明明查询的右端点是12,但是要split(13)呢? 2.为什么要先分裂右端点,然后再分裂左端点呢? 3.获取到区 ...

  4. [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解

    参考资料: Chtholly Tree (珂朵莉树) (应某毒瘤要求,删除链接,需要者自行去Bilibili搜索) 毒瘤数据结构之珂朵莉树 在全是珂学家的珂谷,你却不知道珂朵莉树?来跟诗乃一起学习珂朵 ...

  5. 一种黑科技:珂朵莉树

    首先要明白的是:珂朵莉树(ODT)是一种用来骗分的暴力数据结构. 珂朵莉树的思想是利用集合set,把相同且连续的元素合并为一个个区间,从而进行区间修改:因此,珂朵莉树是区间的集合,这点可以通过定义结构 ...

  6. 浅谈珂朵莉树(ODT)

    前言 珂学家狂喜( 文章目录 前言 一.珂朵莉树来源 二.珂朵莉树 1.珂朵莉树有什么用? 2.原理是什么? a.存储 b.分割结点 c.推平 d.剩余操作 3.复杂度分析 三.珂朵莉树例题 1.P4 ...

  7. 浅谈珂朵莉树(Chtholly Tree)——暴力而玄学的数据结构

    关于它很珂学的名字- 珂朵莉树(Chtholly Tree),又称老司机树(Old Driver Tree),起源于CodeFoeces平台上编号为896C的一道题-- " Willem, ...

  8. 珂朵莉树(永远喜欢珂朵莉/doge)

    目录 前言 可能用到前置知识 背景 构建珂朵莉树 核心函数 珂朵莉树在实际题目使用 对珂朵莉树的一些感想 最后的最后 前言 最近刚刚学内容大概是借鉴的吧,感觉这个数据结构不仅简单,还很强,有着非常柯学 ...

  9. 数据结构 【树状数组】【线段树】【珂朵莉树】

    一.区间合并 1.AcWing245你能回答这些问题吗 分析: 线段树.维护四个变量,即可实现区间合并. mx 区间最大连续子段和 mx_l 以区间左端点为左界的最大连续字段和 mx_r 以区间左端点 ...

  10. CodeForces - 897E Willem, Chtholly and Seniorious(珂朵莉树)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,现在需要执行 mmm 次操作,每次操作分为下列四种情况: 1lrx1 \ l \ r \ x1 l r x:[l,r][l,r][l,r] ...

最新文章

  1. Socket编程(C语言实现)—— AF_INET(典型的TCP/IP四层模型的通信过程),AF_UNIX(本地进程间通信)
  2. .Net Micro Framework研究—TCP/IP通信
  3. Exchange 2016部署实施案例篇-04.Ex基础配置篇(下)
  4. /*携程面试*/四个数组,都已经排好序,找出四个数组的交集
  5. oracle 错误码1438,一次ora-01438错误的处理
  6. 字典树实现_trie 字典树的实现方法
  7. MySQL影院管理系统_数据库三级项目(电影院管理系统)
  8. 抽奖活动mysql表设计_抽奖项目的系统设计方案
  9. 小型电商平台系统需求分析文档
  10. Airbnb房源信息爬取(二)——获取房源信息
  11. 安卓系统手机如何用作电脑摄像头使用及解决方法
  12. 自学python能干什么知乎_自学python能干什么
  13. DirectX12(D3D12)基础教程(六)——多线程渲染
  14. 如何判断是否适合学编程?
  15. 腾讯手游助手修改共享目录/缓存目录/Temp文件夹路径
  16. SharePoint Server 2007 简体中文下载
  17. DB2 HADR TSA安装
  18. L1-036 A乘以B Python
  19. 又双叒叕找不到图了?UI设计师独家分享年度十大高清图片网站
  20. 蓝桥试题集-基础练习-BASIC-18~21-矩阵面积交-完美的代价-数的读法-Sine之舞

热门文章

  1. Oracle listagg去重distinct三种方法总结
  2. Java创建多线程的方法总结
  3. 动态规划(Dynamic Programming)理论篇
  4. 冒泡排序(C#)实现
  5. 2gt;MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _calloc 已经在 LIBCMTD.lib(dbgcalloc.obj) 中定义...
  6. scikit-learn:在实际项目中用到过的知识点(总结)
  7. Firefox 网页 光标 闪烁
  8. codereviw得到的一些经验
  9. WinForm编程开发实用技巧14则(转)
  10. 分享Android开发的一些工具