CF915E Physical Education Lessons(珂朵莉树)
中文题面
据说正解是动态开点线段树而且标记也不难下传的样子
然而这种区间推平的题目还是喜欢写珂朵莉树啊……码量小……
虽然真要构造的话随便卡……
1 //minamoto 2 #include<cstdio> 3 #include<set> 4 #include<iostream> 5 #define IT set<node>::iterator 6 using namespace std; 7 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) 8 char buf[1<<21],*p1=buf,*p2=buf; 9 inline int read(){ 10 #define num ch-'0' 11 char ch;bool flag=0;int res; 12 while(!isdigit(ch=getc())) 13 (ch=='-')&&(flag=true); 14 for(res=num;isdigit(ch=getc());res=res*10+num); 15 (flag)&&(res=-res); 16 #undef num 17 return res; 18 } 19 char sr[1<<21],z[20];int K=-1,Z; 20 inline void Ot(){fwrite(sr,1,K+1,stdout),K=-1;} 21 inline void print(int x){ 22 if(K>1<<20)Ot();if(x<0)sr[++K]=45,x=-x; 23 while(z[++Z]=x%10+48,x/=10); 24 while(sr[++K]=z[Z],--Z);sr[++K]='\n'; 25 } 26 struct node{ 27 int l,r;mutable int v; 28 node(int L,int R=-1,int V=0):l(L),r(R),v(V){} 29 inline bool operator <(const node &b)const 30 {return l<b.l;} 31 }; 32 set<node> s;int sum; 33 IT split(int pos){ 34 IT it=s.lower_bound(node(pos)); 35 if(it!=s.end()&&it->l==pos) return it; 36 --it; 37 int l=it->l,r=it->r,v=it->v; 38 s.erase(it); 39 s.insert(node(l,pos-1,v?pos-l:0)); 40 return s.insert(node(pos,r,v?r-pos+1:0)).first; 41 } 42 void assign(int l,int r,int v){ 43 IT itr=split(r+1),itl=split(l); 44 for(IT it=itl;it!=itr;++it) sum-=it->v; 45 s.erase(itl,itr),s.insert(node(l,r,v*(r-l+1))); 46 sum+=v*(r-l+1); 47 } 48 int main(){ 49 // freopen("testdata.in","r",stdin); 50 int n=read(),q=read(); 51 s.insert(node(1,n+1,1));sum=n; 52 while(q--){ 53 int l=read(),r=read(); 54 assign(l,r,read()-1); 55 print(sum); 56 } 57 return Ot(),0; 58 }
转载于:https://www.cnblogs.com/bztMinamoto/p/9810833.html
CF915E Physical Education Lessons(珂朵莉树)相关推荐
- 算法自学__珂朵莉树
参考资料: https://zhuanlan.zhihu.com/p/106353082 https://blog.csdn.net/CC_dsm/article/details/98166835 珂 ...
- 珂朵莉树/ODT 学习笔记
珂朵莉树/ODT 学习笔记 起源自 CF896C.珂朵莉yyds! 核心思想 把值相同的区间合并成一个结点保存在 set 里面. 用处 骗分.只要是有区间赋值操作的数据结构题都可以用来骗分.在数据随机 ...
- 浅谈珂朵莉树(ODT)
前言 珂学家狂喜( 文章目录 前言 一.珂朵莉树来源 二.珂朵莉树 1.珂朵莉树有什么用? 2.原理是什么? a.存储 b.分割结点 c.推平 d.剩余操作 3.复杂度分析 三.珂朵莉树例题 1.P4 ...
- [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解
参考资料: Chtholly Tree (珂朵莉树) (应某毒瘤要求,删除链接,需要者自行去Bilibili搜索) 毒瘤数据结构之珂朵莉树 在全是珂学家的珂谷,你却不知道珂朵莉树?来跟诗乃一起学习珂朵 ...
- CodeForces - 897E Willem, Chtholly and Seniorious(珂朵莉树)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,现在需要执行 mmm 次操作,每次操作分为下列四种情况: 1lrx1 \ l \ r \ x1 l r x:[l,r][l,r][l,r] ...
- CF896C Willem, Chtholly and Seniorious(珂朵莉树)
中文题面 珂朵莉树的板子--这篇文章很不错 据说还有奈芙莲树和瑟尼欧里斯树-- 等联赛考完去学一下(逃 1 //minamoto 2 #include<bits/stdc++.h> 3 # ...
- 【日志】珂学——珂朵莉树
珂朵莉树 (珂学) 珂朵莉树(或者老司机树)起源于CF896C. 由于之前做到每一组数据都要另外开数据结构,所以现在一些东西就会写为class包装 前置知识点 STL中set的使用(list也行,但是 ...
- 一种黑科技:珂朵莉树
首先要明白的是:珂朵莉树(ODT)是一种用来骗分的暴力数据结构. 珂朵莉树的思想是利用集合set,把相同且连续的元素合并为一个个区间,从而进行区间修改:因此,珂朵莉树是区间的集合,这点可以通过定义结构 ...
- 2022年9月CSP认证题解 如此编码(k进制),何以包邮?(背包问题),吉祥物投票(珂朵莉树、懒标记、并查集)
T1 如此编码 思路 由公式 和前缀乘积定义 得m=b1+a1×b2+⋅⋅⋅+a1×a2×⋅⋅⋅×an−1×bnm=b_1+a_1\times b_2+···+a_1\times a_2\times· ...
最新文章
- Azure操作手册集合
- 计算机操作员有关大学专业,计算机操作员国家职业标准
- 二叉树的前中后序递归和非递归遍历操作【代码】
- 考研数学早年真题整理20题(很有可能重考!!)
- ASP.NET缓存:方法分析和实践示例
- 推荐系统遇上深度学习(十七)--探秘阿里之MLR算法浅析及实现
- php 验证真实姓名,支付宝转账到支付宝 验证真实姓名
- 佐治亚理工学院 计算投资公开课第五周作业 市场仿真器
- #436. 子串的最大差(单调栈)
- 爬楼梯 java_爬楼梯问题java实现
- keil4 代码折叠功能的使用
- mount qemu qcow2、img
- 用 Python 做了一个小姐姐跳舞的词云视频
- HTML中如何将字体加粗-前端入门
- html中的 语言设置
- P14-Vue-supermall项目-BetterScroll滚动插件基本使用
- CentOS 7无法启动,在进度条卡死问题解决
- 2022年计算机四级考试冲刺试题及答案(多选题)
- variable argument parameter的区别
- LZO和MiniLZO编码介绍