洛谷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.pswp.cn/news/281866.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281866.shtml
英文地址,請注明出處:http://en.pswp.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;它的主要目標是在生產環境中提供出色的性能和良好的開發…