题解:

好像是什么替罪羊树

然后看了几个题解

然后就抄了一边

代码:

#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. Please check registry access list (whitelist/blacklist)

    https://blog.csdn.net/sprita1/article/details/51735566

  2. FFmpeg从入门到精通——进阶篇,SEI那些事儿

    前言 在直播应用的开发过程中,如果把主播端消息事件传递到观众端,一般会以Instant Messaging(即时通讯)的方式传递过去,但因为消息分发通道和直播通道是分开的,因此消息与直播音视频数据的同 ...

  3. PHP+MySQL数据库编程的步骤

    第一步:PHP连接MySQL服务器 第二步:选择当前要操作的数据库 第三步:设置请求或返回的数据的字符集 第四步:执行各种SQL语句. PHP连接MySQL服务器 1.mysql_connect() ...

  4. 《Java 程序设计》团队博客第十一周(第一次)

    <Java 程序设计>团队博客第十一周(第一次) 团队项目 1.项目内容.目标 项目内容 本组的团队项目准备实现一个有关于大富翁有的游戏程序. 大富翁游戏,以经营权为主要的游戏方式,通过购 ...

  5. php-fpm 信号

    使用信号之前,需要先确保php-fpm.conf 里面有配置pid,默认是被注释掉的. ;pid = run/php-fpm.pid 文件在 php安装目录/var/run/php-fpm.pid 信 ...

  6. 4.9版本的linux内核中实时时钟芯片pt7c4338的驱动源码在哪里

    答:drivers/rtc/rtc-ds1307.c,内核配置项为CONFIG_RTC_DRV_DS1307 Location: -> Device Drivers -> Real Tim ...

  7. 手动装配Bean

    代码: import org.springframework.context.ApplicationContext; import org.springframework.context.suppor ...

  8. [BZOJ1996] chorus合唱队

    Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT 区间$dp$,首先每个点被放入队伍时队 ...

  9. Commons Configuration之一简介

    转载自(https://my.oschina.net/u/2000201/blog/486327) 1    简介 Commons Configuration软件类库提供通用配置接口,使Java应用程 ...

  10. javaWeb中JNDI的使用,为什么要加java:comp/env前缀

    转载自(http://blog.csdn.net/guodongsoft/article/details/52399527) 我们在使用JNDI调用某个对象时,会有下述两种方式 context.loo ...