把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

luogu P4364 [九省联考 2018] IIIDX

题面传送门
应该看到可以一眼胡一个贪心出来:按照编号从小到大维护,每次放能放的最大的并给子树内留好位置。
然后你兴奋地交上去发现得到了60pts的好成绩
发现问题出在有重复的时候会出现问题,可能前面的用掉更好。
考虑维护一颗线段树,每个节点上维护大于等于它的权值还有几个。
然后预留相当于在更小的节点减去子树大小,查询的时候线段树上二分即可。
code:

#include<bits/stdc++.h>
#define I inline
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define abs(x) ((x)>0?(x):-(x))
#define ll long long
#define U unsigned int
#define db double
#define lb long db
#define N (500000+5)
#define M (220+5)
#define K (650+5)
#define mod 998244353
#define Mod (mod-1)
#define eps (1e-9)
#define ull unsigned ll
#define it iterator
#define Gc() getchar() 
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) (n*(x-1)+(y))
#define R(n) (rand()*rand()%(n)+1)
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define PB push_back
using namespace std;db k;
int n,m,x,y,z,fa[N],D[N],A[N],B[N],Ns[N],Nh,Si[N],Fl[N];
namespace Tree{
	#define ls now<<1
	#define rs now<<1|1
	int F[N<<2],G[N<<2];I void Up(int now){F[now]=min(F[ls],F[rs]);}I void PF(int now,int w){F[now]+=w;G[now]+=w;}I void P(int now){G[now]&&(PF(ls,G[now]),PF(rs,G[now]),G[now]=0);}
	I void Ins(int x,int y,int z,int l=1,int r=Nh+1,int now=1){if(x<=l&&r<=y) return PF(now,z);P(now);int m=l+r>>1;x<=m&&(Ins(x,y,z,l,m,ls),0);y>m&&(Ins(x,y,z,m+1,r,rs),0);Up(now);}
	I int Qry(int x,int l=1,int r=Nh+1,int now=1){if(l==r) return l;int m=l+r>>1;P(now);return F[ls]>=x?Qry(x,m+1,r,rs):Qry(x,l,m,ls);}
	#undef ls
	#undef rs
} 
int main(){
	freopen("1.in","r",stdin);
	int i;scanf("%d%lf",&n,&k);for(i=1;i<=n;i++) scanf("%d",&A[i]),fa[i]=i/k,D[i]=D[fa[i]]+1,Si[i]=1,Ns[++Nh]=A[i];sort(Ns+1,Ns+Nh+1);Nh=unique(Ns+1,Ns+Nh+1)-Ns-1;
	for(i=n;i;i--) Si[fa[i]]+=Si[i],A[i]=LB(Ns+1,Ns+Nh+1,A[i])-Ns,Tree::Ins(1,A[i],1);
	for(i=1;i<=n;i++) fa[i]&&!Fl[fa[i]]&&(Tree::Ins(1,B[fa[i]],Si[fa[i]]-1),Fl[fa[i]]=1),printf("%d ",Ns[B[i]=Tree::Qry(Si[i])-1]),Tree::Ins(1,B[i],-Si[i]);
}
posted @ 2022-05-15 13:40  275307894a  阅读(25)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end