LCT的A+B题解:

#include<iostream>
#include<cstring> #include<cstdio> #include<cstring> using namespace std; struct node { int data,rev,sum; node *son[2],*pre; bool judge(); bool isroot(); void pushdown(); void update(); void setson(node *child,int lr); }lct[233]; int top,a,b; node *getnew(int x) { node *now=lct+ ++top; now->data=x; now->pre=now->son[1]=now->son[0]=lct; now->sum=0; now->rev=0; return now; } bool node::judge(){return pre->son[1]==this;} bool node::isroot() { if(pre==lct)return true; return !(pre->son[1]==this||pre->son[0]==this); } void node::pushdown() { if(this==lct||!rev)return; swap(son[0],son[1]); son[0]->rev^=1; son[1]->rev^=1; rev=0; } void node::update(){sum=son[1]->sum+son[0]->sum+data;} void node::setson(node *child,int lr) { this->pushdown(); child->pre=this; son[lr]=child; this->update(); } void rotate(node *now) { node *father=now->pre,*grandfa=father->pre; if(!father->isroot()) grandfa->pushdown(); father->pushdown();now->pushdown(); int lr=now->judge(); father->setson(now->son[lr^1],lr); if(father->isroot()) now->pre=grandfa; else grandfa->setson(now,father->judge()); now->setson(father,lr^1); father->update();now->update(); if(grandfa!=lct) grandfa->update(); } void splay(node *now) { if(now->isroot())return; for(;!now->isroot();rotate(now)) if(!now->pre->isroot()) now->judge()==now->pre->judge()?rotate(now->pre):rotate(now); } node *access(node *now) { node *last=lct; for(;now!=lct;last=now,now=now->pre) { splay(now); now->setson(last,1); } return last; } void changeroot(node *now) { access(now)->rev^=1; splay(now); } void connect(node *x,node *y) { changeroot(x); x->pre=y; access(x); } void cut(node *x,node *y) { changeroot(x); access(y); splay(x); x->pushdown(); x->son[1]=y->pre=lct; x->update(); } int query(node *x,node *y) { changeroot(x); node *now=access(y); return now->sum; } int main() { scanf("%d%d",&a,&b); node *A=getnew(a); node *B=getnew(b); //连边 Link connect(A,B); //断边 Cut cut(A,B); //再连边orz Link again connect(A,B); printf("%d\n",query(A,B)); return 0; }

Splay:

代码送上

#include <bits/stdc++.h>
#define ll long long #define N 100000 using namespace std; int sz[N], rev[N], tag[N], sum[N], ch[N][2], fa[N], val[N]; int n, m, rt, x; void push_up(int x){ sz[x] = sz[ch[x][0]] + sz[ch[x][1]] + 1; sum[x] = sum[ch[x][1]] + sum[ch[x][0]] + val[x]; } void push_down(int x){ if(rev[x]){ swap(ch[x][0], ch[x][1]); if(ch[x][1]) rev[ch[x][1]] ^= 1; if(ch[x][0]) rev[ch[x][0]] ^= 1; rev[x] = 0; } if(tag[x]){ if(ch[x][1]) tag[ch[x][1]] += tag[x], sum[ch[x][1]] += tag[x]; if(ch[x][0]) tag[ch[x][0]] += tag[x], sum[ch[x][0]] += tag[x]; tag[x] = 0; } } void rotate(int x, int &k){ int y = fa[x], z = fa[fa[x]]; int kind = ch[y][1] == x; if(y == k) k = x; else ch[z][ch[z][1]==y] = x; fa[x] = z; fa[y] = x; fa[ch[x][!kind]] = y; ch[y][kind] = ch[x][!kind]; ch[x][!kind] = y; push_up(y); push_up(x); } void splay(int x, int &k){ while(x != k){ int y = fa[x], z = fa[fa[x]]; if(y != k) if(ch[y][1] == x ^ ch[z][1] == y) rotate(x, k); else rotate(y, k); rotate(x, k); } } int kth(int x, int k){ push_down(x); int r = sz[ch[x][0]]+1; if(k == r) return x; if(k < r) return kth(ch[x][0], k); else return kth(ch[x][1], k-r); } void split(int l, int r){ int x = kth(rt, l), y = kth(rt, r+2); splay(x, rt); splay(y, ch[rt][1]); } void rever(int l, int r){ split(l, r); rev[ch[ch[rt][1]][0]] ^= 1; } void add(int l, int r, int v){ split(l, r); tag[ch[ch[rt][1]][0]] += v; val[ch[ch[rt][1]][0]] += v; push_up(ch[ch[rt][1]][0]); } int build(int l, int r, int f){ if(l > r) return 0; if(l == r){ fa[l] = f; sz[l] = 1; return l; } int mid = l + r >> 1; ch[mid][0] = build(l, mid-1, mid); ch[mid][1] = build(mid+1, r, mid); fa[mid] = f; push_up(mid); return mid; } int asksum(int l, int r){ split(l, r); return sum[ch[ch[rt][1]][0]]; } int main(){ //总共两个数 n = 2; rt = build(1, n+2, 0);//建树 for(int i = 1; i <= n; i++){ scanf("%d", &x); add(i, i, x);//区间加 } rever(1, n);//区间翻转 printf("%d\n", asksum(1, n));//区间求和 return 0; }
最后是楼主最喜欢的妹子

转载于:https://www.cnblogs.com/lsjjz/p/7405645.html

c++版a+b问题的各种无聊做法相关推荐

  1. 计算机文化基础案例教程第三版答案,计算机文化基础案例教程教学课件作者第3版谭宁教学课件素材排骨做法.doc...

    计算机文化基础案例教程教学课件作者第3版谭宁教学课件素材排骨做法.doc (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 1.香酥排 ...

  2. 探底-【转】网络上和淘宝上所谓的台版山寨机是真的吗?

    探底-[转]网络上和淘宝上所谓的台版山寨机是真的吗?<?xml:namespace prefix = o /> 2009-10-22 23:32 作者:admin 我要投稿 http:// ...

  3. 编程语言十二生肖查询网页版制作(php)

    编程语言十二生肖查询网页版制作(php) 今天无聊做了一个十二生肖查询器: 预览网址效果:http://hongxing01.hktd02u.me48.com/03Sxcx 源代码下载:http:// ...

  4. Veeam 社区版和 EULA

    Veeam 社区版和 EULA 尽管可能很无聊,但阅读您的最终用户许可协议可能会很有用.Veeam 社区版和 Veeam EULA也没有什么不同.EULA 最近在讨论 IT 服务业务可以向其客户提供的 ...

  5. Redis入门指南(第2版) Redis设计思路学习与总结

    https://www.qcloud.com/community/article/222 宋增宽,腾讯工程师,16年毕业加入腾讯,从事海量服务后台设计与研发工作,现在负责QQ群后台等项目,喜欢研究技术 ...

  6. (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版

    http://blog.csdn.net/yerenyuan_pku/article/details/72863323 我们知道Jedis在处理Redis的单机版和集群版时是完全不同的,有可能在开发的 ...

  7. 作为DQM的首次战棋尝试,《勇者斗恶龙战略版》何以开局便成功

    上线当天,空降App store下载榜第一,畅销榜第五,总下载量超过百万(仅上线iOS).而在后续的一周中,任何情况都没有阻止它的势头,<勇者斗恶龙战略版(ドラゴンクエストタクト)>首秀便 ...

  8. Mac 版ps cs6 破解

    mac版的pscs6 破解很简单的做法 http://blog.sina.com.cn/s/blog_73dc36510101ahim.html

  9. arm linux运行安卓app,Android x86 下运行纯ARM版APP

    Android x86 默认不带houdini,运行纯ARM版会提示: 很抱歉,"xxxx"已停止运行 设置->应用兼容性->打开 终端模拟器 $ su # enabl ...

最新文章

  1. log4cplus的内存泄露问题
  2. [ZPG TEST 109] 兔子跳跃【构图】
  3. java vector arraylist linkedlist用法与区别
  4. Pangolin在cmake时报“Could NOT find GLEW”错误
  5. Matlab | Matlab从入门到放弃(14)——基于Matlab的多变量数据分析
  6. 小议WebRTC拥塞控制算法:GCC介绍
  7. QT的QReadWriteLock类的使用
  8. Eureka-服务注册
  9. 全球500强企业人力资源管理之道
  10. .NET6下周发布真的香,可不少人却只会.NET Framework!
  11. 算法---会议最大安排问题
  12. java 酒店预定 app_Android应用源码酒店在线预定app项目全套
  13. SQL Server - 高可用与灾难恢复(HADR)技术 -- AlwaysOn可用性组(理论篇)
  14. vim默认设置的配置
  15. this.scrollheight获取textarea的高度是0_【2019年14卷3期】UHF传感器固定角度和加装屏蔽罩对有效高度的影响丨电气工程学报文章推荐...
  16. matlab中ode45函数的用法_带你理解Excel中COUNTIF函数的简单用法
  17. 【电路仿真】基于matlab simulink三相半波可控整流电路【含Matlab源码 331期】
  18. Layabox的2d精灵的性能优化
  19. android 基带版本,基带是什么 基带版本是什么
  20. re -12 buuctf [Zer0pts2020]easy strcmp

热门文章

  1. 国内较强的NLP高校实验室有哪些?
  2. SAP PM 初级系列1 – 定义维护工厂和维护计划工厂
  3. 深度学习基础——激活函数以及什么时候使用它们?
  4. AI时代,产品经理需要掌握的5项新技能
  5. BERT中的词向量指南
  6. 人工智能进阶-CIFAR-10数据集介绍
  7. 《百面机器学习》笔记-特征工程相关面试题
  8. SAP MM已经转成PO的采购申请Item依旧可以被删除?
  9. 【深度学习理论】一文看懂卷积神经网络
  10. 回顾丨2017年人工智能带火了哪些词