用什麼
一眼看上去就像乙個資料結構,但是好像很複雜。
看看能幹什麼先!
能支援區間找名次,支援修改。
不知道treap可不可以做,不過區間維護名詞好像不行吧。
發現範圍十分的小,分塊**好。
怎麼做
對每一塊排乙個序,維護乙個加號的標記就可以了。
#include
#include
#include
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
const
int maxn=80007;
using
namespace
std;
int i,j,k,l,t,n,m,ans,a[maxn],o;
int b[405][405],jia[405],shu[maxn],chang[maxn],kua;
/*int read()
while(ch>='0'&&ch<='9')
return x*f;
}*/void build(int x)
sort(b[x]+1,b[x]+chang[x]+1);
}int erfen(int x,int y)
return l;
} int pan(int x,int l,int r)
fo(i,shu[l]+1,shu[r]-1)
fo(i,l,kua*shu[l])
if(a[i]+jia[shu[l]]1)+1,r)
if(a[i]+jia[shu[r]]return k;
}int main()
fo(i,1,shu[n])
scanf("%d",&m);
fo(j,1,m)
else
}else
printf("%d\n",zuo);}}
}
HNOI2016模擬4 10 K小數查詢
維護乙個長度為n的序列,使得其支援m次操作,包括區間插入和區間求k小數。n,m 80000,在任何時候 ai 5000000 一看到區間第k大 小,就想到了主席樹。但這個是區間修改!怎麼做呢?分塊 好 觀察到時限7s,果斷上分塊。複雜度好不科學 分塊 好?用每乙個塊維護排過序後的塊和原來的塊,然後對...
HNOI2016模擬4 10 K小數查詢
維護乙個長度為n的序列,該序列支援q個操作 將第l到r個數加上x 詢問l到r之間第k小個數是什麼。看到實現時間7000ms,嘿嘿,果斷分塊打法。大呼 分塊 好 這題因為有區間加操作,直接用資料結構難以維護區間 k 小值。但是可以用 分塊解決此題。最簡單的方法是每個塊維護原塊和排序後的塊,詢問時二分答...
查詢第K小數
查詢乙個陣列的第k小的數,注意同樣大小算一樣大。如 2 1 3 4 5 2 第三小數為3。輸入描述 輸入有多組資料。每組輸入n,然後輸入n個整數 1 n 1000 再輸入k。輸出描述 輸出第k小的整數。輸入例子 6 2 1 3 5 2 2 3 輸出例子 3 import j a.util.array...