JZOJ 5638. 【NOI2018模拟4.8】IIIDX
生活随笔
收集整理的這篇文章主要介紹了
JZOJ 5638. 【NOI2018模拟4.8】IIIDX
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Description
Input
Output
Sample Input
4 2.0
114 514 1919 810
Sample Output
114 810 514 1919
Data Constraint
Solution
先考慮一個貪心,將數(shù)從大到小填到樹的后序遍歷上。
但是這只能過 di 互不相同的數(shù)據(jù)點(diǎn),如數(shù)據(jù):
4 2
1 1 1 2
就能卡的你痛不欲生……
關(guān)鍵在于沒有預(yù)留足夠的點(diǎn)填到一個點(diǎn)的子樹內(nèi)。
我們先將數(shù)從小到大排序,從小到大地填。
注意可以新建一個 0 號節(jié)點(diǎn),把森林變成一顆樹方便處理。
設(shè)一個點(diǎn)在線段樹的后綴子樹大小為 Size ,一個數(shù)的重復(fù)個數(shù)為 P ,
那么這個數(shù)要填到一個點(diǎn) i 滿足:Sizei≥P (感性理解)。
結(jié)合上述數(shù)據(jù)可以清楚地得出這個結(jié)論……
于是用線段樹維護(hù)區(qū)間和還有單點(diǎn)修改即可。
時間復(fù)雜度為 O(N?log?N) 。
Code
#include<cstdio> #include<algorithm> #include<cmath> #include<cctype> using namespace std; const int N=5e5+5; int n,tot,qx,qy; double k; int first[N],nex[N],en[N],size[N]; int a[N],fa[N],ans[N],f[N<<2]; inline int read() {int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X; } inline void write(int x) {if(x>9) write(x/10);putchar(x%10+'0'); } inline void insert(int x,int y) {nex[++tot]=first[x];first[x]=tot;en[tot]=y;size[x]+=size[y]; } void change(int v,int l,int r) {f[v]+=qy;if(l==r) return;int mid=l+r>>1;if(qx<=mid) change(v<<1,l,mid); else change(v<<1|1,mid+1,r); } int find(int v,int l,int r,int x) {if(l==r) return l;int mid=l+r>>1;if(f[v<<1|1]>=x) return find(v<<1|1,mid+1,r,x);return find(v<<1,l,mid,x-f[v<<1|1]); } int main() {n=read(),scanf("%lf",&k);for(int i=1;i<=n;i++) a[i]=read(),size[i]=1;sort(a+1,a+1+n);for(int i=n;i;i--) insert(floor(i*1.0/k),i);for(int i=first[0];i;i=nex[i]){qy=size[qx=en[i]];change(1,1,n);}for(int i=1,k=1;i<=n;i=k){while(k<=n && a[i]==a[k]) k++;for(int j=k-i;j;j--){int pos=find(1,1,n,j);ans[pos]=a[i];qy=-size[qx=pos];change(1,1,n);for(int l=first[pos];l;l=nex[l]){qy=size[qx=en[l]];change(1,1,n);}}}for(int i=1;i<=n;i++) write(ans[i]),putchar(' ');return 0; }總結(jié)
以上是生活随笔為你收集整理的JZOJ 5638. 【NOI2018模拟4.8】IIIDX的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JZOJ 5637. 【NOI2018模
- 下一篇: JZOJ 5639. 【NOI2018模