bzoj千題計劃324:bzoj5249: [2018多省省隊聯測]IIIDX(線段樹)
#include<cmath> #include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 500001 int d[N],ans[N]; int siz[N]; int front[N],nxt[N],to[N],tot; int sum[N<<2]; void read(int &x) { x=0; char c=getchar(); while(!isdigit(c)) c=getchar();while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); } } void add(int u,int v) { to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; siz[u]+=siz[v]; } void change(int k,int l,int r,int pos,int w) { if(l==r) { sum[k]+=w; return; } int mid=l+r>>1;if(pos<=mid) change(k<<1,l,mid,pos,w); else change(k<<1|1,mid+1,r,pos,w); sum[k]=sum[k<<1]+sum[k<<1|1]; } int find(int k,int l,int r,int s) { if(l==r) return l; int mid=l+r>>1; if(s<=sum[k<<1|1]) return find(k<<1|1,mid+1,r,s);return find(k<<1,l,mid,s-sum[k<<1|1]); } int main() { int n; double k; read(n); scanf("%lf",&k); for(int i=1;i<=n;++i) read(d[i]); sort(d+1,d+n+1); for(int i=1;i<=n;++i) siz[i]=1; for(int i=n;i;--i) add(i/k,i); for(int i=front[0];i;i=nxt[i]) change(1,1,n,to[i],siz[to[i]]); int j=1,t; for(int i=1;i<=n;i=j) { while(j<=n && d[i]==d[j]) j++; for(int l=j-i;l;--l) { t=find(1,1,n,l); ans[t]=d[i]; change(1,1,n,t,-siz[t]); for(int h=front[t];h;h=nxt[h]) change(1,1,n,to[h],siz[to[h]]); } } for(int i=1;i<=n;++i) printf("%d ",ans[i]); return 0; }
相關推薦
bzoj千題計劃324:bzoj5249: [2018多省省隊聯測]IIIDX(線段樹)
#include<cmath> #include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 500001 int d[N
bzoj千題計劃321:bzoj5251: [2018多省省隊聯測]劈配(網路流 + 二分)
#include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #d
bzoj千題計劃311:bzoj5017: [Snoi2017]炸彈(線段樹優化tarjan構圖)
#include<cstdio> #include<vector> #include<iostream> #include<algorithm> using namespace std; const int mod=1e9+7;
bzoj千題計劃319:bzoj2865: 字串識別(字尾自動機 + 線段樹)
#include<map> #include<cstdio> #include<cstring> #include<algorithm> #define N 500001 using namespace std; char s[
bzoj千題計劃310:bzoj5285: [Hnoi2018]尋寶遊戲(思維題+雜湊)
#include<cstdio> #include<algorithm> #define N 5001 using namespace std; const int mod=1e9+7; int bit[N]; char s[N]; int has
bzoj千題計劃316:bzoj3173: [Tjoi2013]最長上升子序列(二分+樹狀陣列)
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 100001 #define lowbit(x) x&-x
bzoj千題計劃309:bzoj4332: JSOI2012 分零食(分治+FFT)
#include<cmath> #include<cstdio> #include<algorithm> using namespace std; const int M=1<<17; #define N 10001 int m,
bzoj千題計劃312:bzoj2119: 股市的預測(字尾陣列+st表)
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #d
bzoj千題計劃317:bzoj4650: [Noi2016]優秀的拆分(字尾陣列+差分)
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 30002 using namespace std; int n;
bzoj千題計劃318:bzoj1396: 識別子串(字尾自動機 + 線段樹)
#include<cstdio> #include<cstring> #include<algorithm> #define N 100001 using namespace std; char s[N]; int ch[N<&
bzoj千題計劃323:bzoj1951: [Sdoi2010]古代豬文(Lucas+CRT+尤拉定理)
#include<cmath> #include<cstdio> #include<iostream> using namespace std; const int mod=999911659; const int phi=mod-1; typ
bzoj千題計劃322:bzoj2561: 最小生成樹(最小割)
#include<cstdio> #include<queue> #include<cstring> #include<iostream> #include<algorithm> using namespace std;
bzoj千題計劃313:bzoj3879: SvT(字尾陣列+st表+單調棧)
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 500001 #define M 3000001 int n,m,mm;
bzoj千題計劃314:bzoj3238: [Ahoi2013]差異(字尾陣列+st表+單調棧)
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define N 500001 int n
bzoj千題計劃320:bzoj4939: [Ynoi2016]掉進兔子洞(莫隊 + bitset)
#include<cmath> #include<cstdio> #include<bitset> #include<cstring> #include<iostream> #include<algorithm> us
bzoj千題計劃308:bzoj4589: Hard Nim(倍增FWT+生成函式)
#include<cstdio> #include<cstring> using namespace std; #define N 50001 const int mod=1e9+7; const int M=1<<16; int inv
bzoj千題計劃315:bzoj3172: [Tjoi2013]單詞(AC自動機)
#include<queue> #include<cstdio> #include<cstring> using namespace std; #define N 2000001 using namespace std; int pos[20
[BZOJ5249][2018多省省隊聯測]IIIDX:貪心,線段樹
down cst print bsp fin can amp algo efi 代碼: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #incl
洛谷P4364 [九省聯考2018]IIIDX(線段樹)
its pre bool span sin += pac 註意 digi 傳送門 題解看得……很……迷? 因為取完一個數後,它的子樹中只能取權值小於等於它的數。我們先把權值從大到小排序,然後記$a_i$為他左
[BZOJ 2957]樓房重建(線段樹)
平面 -- amp clas font 子序列 char cnblogs 自己 Description 小A的樓房外有一大片施工工地,工地上有N棟待建的樓房。每天,這片工地上的房子拆了又建、建了又拆。他經常無聊地看著窗外發呆,數自己能夠看到多少棟房子。 為了簡化問題,我