洛谷P4364 [九省联考2018]IIIDX(线段树)

传送门

 

题解看得……很……迷?

因为取完一个数后,它的子树中只能取权值小于等于它的数。我们先把权值从大到小排序,然后记$a_i$为他左边(包括自己)所有取完他还能取的数的个数。那么当取完一个点$x$的数之后,我们需要为它子树中的点预留出权值,这些权值肯定在它的左边。但我们不知道它子树中的数会取哪几个数,所以我们就把$x$及其右边的数的$a_i$全都减去$x$的子树大小$size_x$,那么就代表$x$的左边有这么多位置被占据了。那么某一个点$y$要取值的时候,我们只要在线段树上找到最左边的一个点,满足它右边(包括自己)所有的$a_i$都大于等于当前子树的$size$即可,这个在线段树上二分就可以了

然后要注意,父亲给他们预留出了权值,那么在做到儿子的时候把这些预留的空间取出来,也就是把上面的影响消除。父亲只给儿子预留了一次空间,所以消除影响也只需要一次就够了

 1 //minamoto
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 inline int read(){
 5     #define num ch-'0'
 6     char ch;bool flag=0;int res;
 7     while(!isdigit(ch=getchar()))
 8     (ch=='-')&&(flag=true);
 9     for(res=num;isdigit(ch=getchar());res=res*10+num);
10     (flag)&&(res=-res);
11     #undef num
12     return res;
13 }
14 const int N=5e5+5;
15 int mn[N<<2],tag[N<<2];
16 int n;double k;
17 int a[N],ans[N],sz[N],fa[N],cnt[N];
18 inline bool cmp(int a,int b){return a>b;}
19 #define ls (p<<1)
20 #define rs (p<<1|1)
21 inline void upd(int p){mn[p]=min(mn[ls],mn[rs]);}
22 inline void ppd(int p,int t){mn[p]+=t,tag[p]+=t;}
23 inline void pd(int p){ppd(ls,tag[p]),ppd(rs,tag[p]),tag[p]=0;}
24 void build(int p,int l,int r){
25     if(l==r) return (void)(mn[p]=l);
26     int mid=(l+r)>>1;
27     build(ls,l,mid),build(rs,mid+1,r),upd(p);
28 }
29 int query(int p,int l,int r,int k){
30     if(l==r) return mn[p]>=k?l:l+1;
31     int mid=(l+r)>>1;if(tag[p]) pd(p);
32     return k<=mn[rs]?query(ls,l,mid,k):query(rs,mid+1,r,k);
33 }
34 void update(int p,int l,int r,int ql,int qr,int k){
35     if(ql<=l&&qr>=r) return (void)(ppd(p,k));
36     int mid=(l+r)>>1;if(tag[p]) pd(p);
37     if(ql<=mid) update(ls,l,mid,ql,qr,k);
38     if(qr>mid) update(rs,mid+1,r,ql,qr,k);
39     upd(p);
40 }
41 int main(){
42 //    freopen("testdata.in","r",stdin);
43     n=read();scanf("%lf",&k);
44     for(int i=1;i<=n;++i) a[i]=read();
45     sort(a+1,a+1+n,cmp);
46     for(int i=n-1;i;--i)
47     cnt[i]=a[i]==a[i+1]?cnt[i+1]+1:0;
48     for(int i=1;i<=n;++i) fa[i]=(int)(i/k),sz[i]=1;
49     for(int i=n;i;--i) sz[fa[i]]+=sz[i];
50     build(1,1,n);
51     for(int i=1;i<=n;++i){
52         if(fa[i]&&fa[i]!=fa[i-1]) update(1,1,n,ans[fa[i]],n,sz[fa[i]]-1);
53         int x=query(1,1,n,sz[i]);
54         x+=cnt[x],++cnt[x],x-=(cnt[x]-1);ans[i]=x;
55         update(1,1,n,x,n,-sz[i]);
56     }
57     for(int i=1;i<=n;++i) printf("%d ",a[ans[i]]);
58     return 0;
59 }

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9807441.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产车崛起粉碎德日工业神话

由于二战战败&#xff0c;德国一大批顶尖人才被美苏瓜分&#xff0c;战败国地位和人才断层导致德国工业基本是第二次工业革命的产物&#xff0c;专精于机械、化工等传统行业&#xff0c;并有巴斯夫、拜尔、大众、戴姆勒、宝马等一批世界级企业。不过&#xff0c;德国世界级的IT…

java hibernate 分页查询_4 Hibernate HQL查询,分页查询

/*** HQL查询的一个例子*/public static void hql(){Session s null;try{s HibernateUtil.getSeesion();//final String hql "from User as u where u.name?";final String hql "from User as u where u.name:name";final Query query s.createQuery…

Linux -sed

sed &#xff0c;查找sed -n /root/p passwd #列出passwd中有root的行 sed -nr /ot/p passwd #sed -r grep -E 都是进行脱意 sed -nr /0{2}/p passwd #匹配两次o的 sed -nr /root|bus/p passwd #匹配root 或者bus的 sed -n 2p passwd # 查找指定的行sed -n 2,5p passwd # 查找…

h5 端图片上传-模拟多张上传

1、由于后端的限制&#xff0c;上传图片到服务器只能的一张一张传2、显示图片预览是本地的图片3、根据服务器返回的结果拿到相应的路径保存到提交评论的接口中4、删除的时候&#xff0c;需要删除对应的路径&#xff0c;不要把删除的提交到评论的接口中 A、comment-detail.js va…

node安装问题

1.最好安装到默认路径&#xff0c;手贱安到了D盘&#xff0c;升级npm各种出错。 明明升级成功&#xff0c;查看版本时&#xff0c;确显示依然是老的版本。 原因&#xff1a;升级的是C盘的node_modules中的npm&#xff0c;执行时确是D盘node自带的npm&#xff0c;不知道为啥。。…

全新升级的AOP框架Dora.Interception[汇总,共6篇]

多年之前利用IL Emit写了一个名为Dora.Interception的AOP框架。前几天利用Roslyn的Source Generator对自己为公司写的一个GraphQL框架进行改造&#xff0c;性能得到显著的提高&#xff0c;觉得类似的机制同样可以用在AOP框架上&#xff0c;实验证明这样的实现方式不仅仅极大地改…

java string转decimal_java中string转bigdecimal的例子

小编知道在java中数据类型非常 的严格了&#xff0c;我们如果一个地方不小心就会导致应用出问题了&#xff0c;今天 小编就在string 转BigDecimal上碰到了一些问题&#xff0c;下面整理了几个例子大家一起来看看。例子1,string 转BigDecimalpublic class Test{public static vo…

通过url来设置log4j的记录级别

2019独角兽企业重金招聘Python工程师标准>>> 直接看代码。 import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Level; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotati…

通过用户模型,对数据库进行增删改查操作

增加&#xff1a;user db.session.add(user)db.session.commit() #增加 user User(username JACKSON,password0328 ) db.session.add(user) db.session.commit() 查询&#xff1a;User.query.filter(User.username mis1114).first() #查询 userUser.query.filter(User.usern…

Android OpenGL ES(七)----理解纹理与纹理过滤

1.理解纹理 OpenGL中的纹理能够用来表示图像。照片&#xff0c;甚至由一个数学算法生成的分形数据。每一个二维的纹理都由很多小的纹理元素组成。它们是小块的数据&#xff0c;类似于我们前面讨论过的片段和像素。要使用纹理&#xff0c;最经常使用的方式是直接从一个图像文件载…

WPF 基础控件之托盘

WPF 基础控件之托盘控件名&#xff1a;NotifyIcon作者&#xff1a; WPFDevelopersOrg - 吴锋|驚鏵原文链接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40。Visual Studio 2022。项目使用 MIT 开源许可协议。新建NotifyIcon自定义…

java 匿名 异常_JAVA类(内部类、匿名内部类、异常、自定义异常)

内部类package AA;public class类 {int de123;StringBuffer deenewStringBuffer();public class成员内部类{public voidff() {System.out.println("这是成员内部类方法");}}/*1.可以访问外部类所有的成员&#xff0c;包括被声明为私有(private)的&#xff1b;2.可以使…

ASP.NET 多环境下配置文件web.config的灵活配置---转

注意&#xff1a;本功能在.Net Core中已经不可用&#xff0c;暂时需手动修改web.config中的信息&#xff0c;或者将其设置在appsettings.XXX.json中&#xff0c;然后再使用web.config中的环境变量来制定使用的具体appsettings文件。 转自&#xff1a;https://www.cnblogs.com/h…

英语之各类人群

工作狂&#xff1a;workaholic 月光族&#xff1a;moonlight group 电灯泡&#xff1a;third wheel 菜鸟&#xff1a;newbie 夜猫子&#xff1a;night owl 路痴&#xff1a;somebody has no sense of derection 宅男宅女&#xff1a;homebody 时尚的潮人&#xff1a;trend sett…

Wget CVE-2014-4877:FTP 符号链接任意文件系统访问

Wget 爆出 CVE-2014-4877 漏洞&#xff1a;FTP 符号链接任意文件系统访问。 Package: wgetVersion: 1.15-1Severity: important Upstream fix&#xff1a; http://git.savannah.gnu.org/cgit/wget.git/commit/?id18b0979357ed7dc4e11d4f2b1d7e0f5932d82aa7 References&#xf…

JavaScript 学习提升

javascript 技能提升 理解闭包 闭包&#xff0c;官方对闭包的解释是&#xff1a;一个拥有许多变量和绑定了这些变量的环境的表达式&#xff08;通常是一个函数&#xff09;&#xff0c;因而这些变量也是该表达式的一部分。闭包的特点&#xff1a;1. 作为一个函数变量的一个引用…

Uranium UI Kit

Uranium UI Kit控件名&#xff1a;Uranium UI Ki作者&#xff1a;enisn原文链接&#xff1a; https://github.com/enisn/UraniumUI项目使用 Apache-2.0 开源许可协议。Uranium 是用于 .NET MAUI 的免费和开源 UI 工具包。它提供了一组控件和实用程序来构建现代应用程序。它建…

数据库监控框架 oneproxy-monitor 开源了

OneProxy-Monitor 是数据库监控的框架&#xff0c;通过这个框架可以快速的开发出一款数据库的监控软件。目前已经在这个框架下面开发出来了sql server的监控软件oneproxy-for-sqlserver&#xff0c; postgresql的监控软件oneproxy-for-postgresql。并且还可以作为协议成的调试软…

java nio epoll_Java NIO 选择器(Selector)的内部实现(poll epoll)

http://blog.csdn.net/hsuxu/article/details/9876983之前强调这么多关于linux内核的poll及epoll&#xff0c;无非是想让大家先有个认识&#xff1a;Java NIO中的选择器依赖操作系统内核的这些系统调用&#xff0c;我们这里只讲解与linux内核相关的NIO实现&#xff0c;当然&…

Next.js 7发布,构建速度提升40%

Next.js团队发布了其开源React框架的7版本。该版本的Next.js主要是改善整体的开发体验&#xff0c;包括启动速度提升57%、开发时的构建速度提升40%、改进错误报告和WebAssembly支持。\\Next.js是一个React框架&#xff0c;它的主要目标是在生产环境中提供出色的性能和良好的开发…