题解:

好像是什么替罪羊树

然后看了几个题解

然后就抄了一边

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,m,rt,R,mx[N],pos[N],id[N],top;
double a[N];
char ch[];
struct data
{
int l,r;
friend bool operator>(data x,data y)
{
if (a[x.l]>a[y.l])return ;
if (a[x.l]==a[y.l]&&a[x.r]>a[y.r])return ;
return ;
}
friend bool operator==(data x,data y)
{
if (x.l!=y.l||x.r!=y.r)return ;
return ;
}
};
struct sctree
{
data v[N];
int cnt,size[N],ls[N],rs[N];
void dfs(int k)
{
if(!k)return;
dfs(ls[k]);
id[++top]=k;
dfs(rs[k]);
}
void build(int &k,int l,int r,double lv,double rv)
{
if(l>r){k=;return;}
double mv=(lv+rv)/2.0;
int mid=(l+r)/;
k=id[mid];a[k]=mv;
build(ls[k],l,mid-,lv,mv);
build(rs[k],mid+,r,mv,rv);
size[k]=size[ls[k]]+size[rs[k]]+;
}
void rebuild(int &k,double lv,double rv)
{
top=;
dfs(k);
build(k,,top,lv,rv);
}
int insert(int &k,double lv,double rv,data val)
{
double mv=(lv+rv)/2.0;
if (!k)
{
k=++cnt;a[k]=mv;v[k]=val;size[k]=;
return k;
}
int p;
if (val==v[k])return k;
else
{
size[k]++;
if (val>v[k])p=insert(rs[k],mv,rv,val);
else p=insert(ls[k],lv,mv,val);
}
if (size[k]*0.75>max(size[ls[k]],size[rs[k]]))
{
if (R)
{
if(ls[k]==R)rebuild(ls[k],lv,mv);
else rebuild(rs[k],mv,rv);
R=;
}
}
else R=k;
return p;
}
}sc;
void modify(int k,int l,int r,int v)
{
int mid=(l+r)>>;
if (l==r){mx[k]=l;return;}
if (v<=mid)modify(k<<,l,mid,v);
else modify(k<<|,mid+,r,v);
int x=mx[k<<],y=mx[k<<|];
if (a[pos[x]]>=a[pos[y]])mx[k]=x;
else mx[k]=y;
}
int query(int k,int l,int r,int x,int y)
{
int mid=(l+r)>>;
if (l==x&&y==r)return mx[k];
int t=,p=;
if (x<=mid)
{
p=query(k<<,l,mid,x,min(mid,y));
if (a[pos[p]]>a[pos[t]])t=p;
}
if (y>mid)
{
p=query(k<<|,mid+,r,max(x,mid+),y);
if(a[pos[p]]>a[pos[t]])t=p;
}
return t;
}
int main()
{
scanf("%d%d",&n,&m);
a[]=-;
sc.insert(rt,,,(data){,});
for (int i=;i<=n;i++)pos[i]=;
for (int i=;i<=n;i++)modify(,,n,i);
int l,r,K;
for (int i=;i<=m;i++)
{
scanf("%s%d%d",ch+,&l,&r);
if (ch[]=='C')
{
scanf("%d",&K);
pos[K]=sc.insert(rt,,,(data){pos[l],pos[r]});
if(R)sc.rebuild(rt,,);R=;
modify(,,n,K);
}
else printf("%d\n",query(,,n,l,r));
}
return ;
}

bzoj3600的更多相关文章

  1. bzoj3600: 没有人的算术

    题意:太难说了..手动去看吧反正不是权限题. 膜拜VFK大爷的神题! 其实一开始思路挺清楚的,如果我们能做到用一个实数去代表"数",这就是裸的动态区间最值查询. 关键是怎么用实数去 ...

  2. BZOJ3600:没有人的算术

    传送门 如果能给每个 \(pair\) 按照权值编号就好了 假设之前已经有了所有的权值的编号,现在考虑编号新的 \(pair\) 如果看过了陈立杰的论文的话,不难得到一个重量平衡树的做法 给树上每个子 ...

  3. [BZOJ3600] 没有人的算术 [重量平衡树+权值线段树]

    题面 传送门 思路 这道题目是陈立杰论文<重量平衡树和后缀平衡树在信息学奥赛中的应用 >中关于重量平衡树维护序列排名算法的一个应用 具体方法为:令根节点保存一个实数区间$[0,1]$ 若当 ...

  4. 「BZOJ3600」没有人的算术 替罪羊树+线段树

    题目描述 过长--不想发图也不想发文字,所以就发链接吧-- 没有人的算术 题解 \(orz\)神题一枚 我们考虑如果插入的数不是数对,而是普通的数,这就是一道傻题了--直接线段树一顿乱上就可以了. 于 ...

  5. 【BZOJ3600】没有人的算术 - 替罪羊树+线段树

    题意: 题解: Orz vfleaking……真·神题 做法大概是先把题意中定义的“数”都赋一个实数权值,用平衡树来维护整个从大到小排序过的序列,再用线段树查询最值: 这样做为什么是对的?考虑插入一个 ...

  6. 【BZOJ3600】没有人的算术(替罪羊树+线段树)

    点此看题面 大致题意: 定义任意数对\(>0\),数对之间比大小先比第一位.后比第二位,一开始数列全为\(0\),要求你支持\(a_k=(a_x,a_y)\)和询问区间最大值所在位置两种操作. ...

  7. shanquan2的两年三题系列

    好像只有2个月就退役啦 不管了,先说一下哪三题:多点求值.lcm.替罪羊树(bzoj3065) [upd0]2016.3.29 多点求值A掉啦,myy卡常数sxbk(不是说好的是shanquan2出的 ...

  8. 3682: Phorni 后缀平衡树 线段树

    国际惯例的题面: 考虑如果没有强制在线我们能怎么水掉这个题,先构造出字符串,各种方法求一下后缀数组,然后线段树维护区间rank最小的位置即可.然而他要求强制在线,支持插入后缀,并比较后缀大小(求ran ...

随机推荐

  1. HDU - 4725 The Shortest Path in Nya Graph(拆点+Dijkstra)

    题意:N个点,每个点有一个层号L,相邻的两层 Li 与 Li+1 之间的距离为C.另外给出M条无向边,求从点1到点N的最短路. 分析:同一层之间的两点距离并不是0,这是一个小坑.依次把相邻两层的所有点 ...

  2. peeping tom 在渗透信息收集前的作用。

    原本想写个截屏类的脚本,发现已经有了这个 py脚本   名字叫作: peeping tom 想要了解详细,戳:https://bitbucket.org/LaNMaSteR53/peepingtom/ ...

  3. crontab + rsyncd同步方案

    目的主机: rsync --daemon [root@iZ23ohdbxmrZ ~]# vim /etc/rsyncd.conf #global settingsport = 873pid file= ...

  4. mysql5.6备份

    备份之前: 最初的二进制信息: mysql> show master logs; +------------------+-----------+ | Log_name | File_size ...

  5. 20145324 Java实验二

    实验1: 先建立.java 在建立test 测试正常情况 测试出错情况 错误 修改后的代码 正确 测试边界情况 100时出错 修改后的代码 测试 实验2: 先建test在写,java 实验3:建模 练 ...

  6. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案

    http://aokunsang.iteye.com/blog/2053719   声明:以下仅为个人的一些总结和随写,如有不对之处,还请看到的网友指出,以免误导. (详细的配置方案请google,这 ...

  7. Java 面试题基础概念收集

    问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”. 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地 ...

  8. SpringMVC,针对不支持PUT、DELETE提交的游览器处理方式

    在REST服务中必不可少的需要PUT.DELETE提交,但是目前很多的游览器并不支持.所以在使用REST前需要进行一些额外的处理. 具体解决方案如下: 1,先添加一个filter.这个filter就是 ...

  9. SEM关键词的三种分类方式

    关键词分类是为了使sem账户搭建结构清晰便于管理关键词.基于对需求人群的深入分析,每个账户都有其独特的分类方式,比如招商加盟行业更多的是地域分类,品牌类企业通常用词性分类即可,而冷门行业用人群分类比较 ...

  10. db2快照

    一.获取快照日志 #1.查看数据库编目 db2 list db directory #2.attach 到要分析的数据库 db2 attach to pm1_9 user db2dev #3.conn ...