【分块】bzoj3196 Tyvj 1730 二逼平衡树
分块 或 树套树。
在每个块中维护一个有序表,查询时各种二分,全都是分块的经典操作,就不详细说了。
块的大小定为sqrt(n*log2(n))比较快。
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int sum,sz,l[],r[],num[],a[],b[],x,y,k,n,m,op,tmp[];
void makeblock()
{
memcpy(b,a,sizeof(a));
sz=sqrt((double)n*log2(n));
for(sum=;sum*sz<n;sum++)
{
l[sum]=(sum-)*sz+;
r[sum]=sum*sz;
for(int i=l[sum];i<=r[sum];i++) num[i]=sum;
sort(b+l[sum],b+r[sum]+);
}
l[sum]=sz*(sum-)+; r[sum]=n;
for(int i=l[sum];i<=r[sum];i++) num[i]=sum;
}
inline void Update()
{
*lower_bound(b+l[num[x]],b+r[num[x]]+,a[x])=y;
sort(b+l[num[x]],b+r[num[x]]+);
a[x]=y;
}
inline void Rank()
{
int ans=;
if(num[x]+>=num[y]) {for(int i=x;i<=y;i++) if(a[i]<k) ans++;}
else
{
for(int i=x;i<=r[num[x]];i++) if(a[i]<k) ans++;
for(int i=l[num[y]];i<=y;i++) if(a[i]<k) ans++;
for(int i=num[x]+;i<num[y];i++) ans+=lower_bound(b+l[i],b+r[i]+,k)-(b+l[i]);
}
printf("%d\n",ans+);
}
inline void Kth()
{
if(num[x]+>=num[y])
{
int en=;
for(int i=x;i<=y;i++) tmp[++en]=a[i];
sort(tmp+,tmp+en+);
printf("%d\n",tmp[k]);
}
else
{
int L=,R=;
while(L!=R)
{
int mid=L+R>>,cnt=;
for(int i=x;i<=r[num[x]];i++) if(a[i]<mid) cnt++;
for(int i=l[num[y]];i<=y;i++) if(a[i]<mid) cnt++; //统计<mid的值数
for(int i=num[x]+;i<num[y];i++) cnt+=lower_bound(b+l[i],b+r[i]+,mid)-(b+l[i]);
if(cnt>=k) R=mid;
else L=mid+;
}
printf("%d\n",L-);
}
}
inline void Front()
{
int ans=-;int* p;
if(num[x]+>=num[y]) {for(int i=x;i<=y;i++) if(a[i]>ans && a[i]<k) ans=a[i];}
else
{
for(int i=x;i<=r[num[x]];i++) if(a[i]>ans && a[i]<k) ans=a[i];
for(int i=l[num[y]];i<=y;i++) if(a[i]>ans && a[i]<k) ans=a[i];
for(int i=num[x]+;i<num[y];i++)
{
p=lower_bound(b+l[i],b+r[i]+,k);
if(p!=b+l[i] && *(p-)<k && *(p-)>ans) ans=*(p-);
}
}
printf("%d\n",ans);
}
inline void Next()
{
int ans=;int* p;
if(num[x]+>=num[y]) {for(int i=x;i<=y;i++) if(a[i]<ans && a[i]>k) ans=a[i];}
else
{
for(int i=x;i<=r[num[x]];i++) if(a[i]<ans && a[i]>k) ans=a[i];
for(int i=l[num[y]];i<=y;i++) if(a[i]<ans && a[i]>k) ans=a[i];
for(int i=num[x]+;i<num[y];i++)
{
p=upper_bound(b+l[i],b+r[i]+,k);
if(p!=b+r[i]+ && *p>k && *p<ans) ans=*p;
}
}
printf("%d\n",ans);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
makeblock();
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&op,&x,&y);
if(op==) Update();
else
{
scanf("%d",&k);
if(op==) Rank();
else if(op==) Kth();
else if(op==) Front();
else Next();
}
}
return ;
}
【分块】bzoj3196 Tyvj 1730 二逼平衡树的更多相关文章
- bzoj3196: Tyvj 1730 二逼平衡树 树套树
地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3196 题目: 3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec ...
- 【带修莫队】【权值分块】bzoj3196 Tyvj 1730 二逼平衡树
这题用了三种算法写: 分块+二分:O(n*sqrt(n*log(n)) 函数式权值分块:O(n*sqrt(n)) 带修莫队+权值分块:O(n5/3) 结果……复杂度越高的实际上跑得越快……最后这个竟然 ...
- 【函数式权值分块】【分块】bzoj3196 Tyvj 1730 二逼平衡树
#include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define ...
- 【线段树套平衡树】【pb_ds】bzoj3196 Tyvj 1730 二逼平衡树
线段树套pb_ds里的平衡树,在洛谷OJ上测试,后三个测试点TLE #include<cstdio> #include<algorithm> #include<ext/p ...
- [bzoj3196]Tyvj 1730 二逼平衡树——线段树套平衡树
题目 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查 ...
- BZOJ3196: Tyvj 1730 二逼平衡树
传送门 主席树的常数蜜汁优越,在BZOJ上跑了rnk1. 做法很简单,主席树套BIT. 1-3做法很简单,第四个和第五个做法转换成前两个就行了. //BZOJ 3196 //by Cydiater / ...
- [bzoj3196][Tyvj 1730][二逼平衡树] (线段树套treap)
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在 ...
- bzoj 3196 Tyvj 1730 二逼平衡树(线段树套名次树)
3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1807 Solved: 772[Submit][Stat ...
- BZOJ 3196: Tyvj 1730 二逼平衡树( 树套树 )
这道题做法应该很多吧.... 我用了线段树套treap.... -------------------------------------------------------------------- ...
随机推荐
- [ZJOI2005]午餐 (DP)
[ZJOI2005]午餐 题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口 ...
- ${pageContext.request.contextPath}的解释以及和request.contextPath的区别
JSP中究竟采用绝对路径还是采用相对路径随着所采用技术的越来越复杂,这个问题也变得越来越难以解决. 1)采用相对路径遇到的问题 l 相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不 ...
- 【BZOJ1146】【CTSC2008】网络管理 [整体二分]
网络管理 Time Limit: 50 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Description M公司是一个非常庞大的跨国公司,在 ...
- [bzoj2251][2010Beijing Wc]外星联络——后缀数组+暴力求解
Brief Description 找到 01 串中所有重复出现次数大于 1 的子串.并按字典序输出他们的出现次数. Algorithm Design 求出后缀数组之后,枚举每一个后缀,对于每个后缀从 ...
- Linux 工作站安全加固规范
目标受众 这是一套 Linux 基金会为其系统管理员提供的推荐规范. 这个文档用于帮助那些使用 Linux 工作站来访问和管理项目的 IT 设施的系统管理员团队. 如果你的系统管理员是远程员工,你也许 ...
- WScript.Shell对象的 run()和exec()函数使用详解
WScript.Shell对象的 run()和exec()函数使用详解 http://blog.sina.com.cn/s/blog_6e14a2050102v47g.html vbScript ...
- tcpip概述
网络协议通常分为不同层次进行开发,每一层分别负责不同的通信功能.一个类似TCPIP的协议簇是一组不同层次上的多个协议的组合.TCPIP通常被认为是一个四层协议系统,分为:应用层(telnet/FTP/ ...
- 【 Keepalived 】Nginx or Http 主-主模式
上一篇:[ Keepalived ]Nginx or Http 主-备模式 在此基础上进行修改并实现 Keepalived主-主模式 首先,需要理解的是:主-备模式是一个VIP在工作,主-主模式则需要 ...
- 搜索引擎--范例:django之初试牛刀
这学期学了一门课<信息检索>,也就是传说中的搜索引擎 大作业自然而然的让我们自己做一个小型的搜索引擎.于是乎,我们本次的主题就诞生了 我也是边学边用,下面和大家一起分享我在这个过程中学到的 ...
- python gui tkinter用法杂记
1.treeview遍历 iids = tree.selection() t = tree.get_children() for i in t: print(tree.item(i,'values') ...