六一兒童節題解QAQ

2021-07-12 06:34:01 字數 1997 閱讀 8763

t1:

有n種方塊,每種方塊有權值和個數。

每次尋找區間[l,r]的權值範圍在[a,b]的方塊中,選k個搭積木。

問每個積木的最大的權值最小是多少。

n,m<=30000

題解:

問最大的權值最小不就是……

排個序之後的第k個,就是最大的最小權值了啊……

然後所以我們考慮這個東西不就是有權值範圍限制的第k大嗎……

這不是裸的可持久化線段樹嗎……

隨便搞搞就好了。

#include 

#include

#include

#define rep(i,n) for(int i = 1;i <= n;i ++)

#define u t[x]

#define o t[y]

#define mid (l + r >> 1)

#define lson u.lc,l,mid

#define rson u.rc,mid + 1,r

using namespace std;

const int n = 30005;

const int nn = ((1

<< 30) - 5);

int tot = 0,n,m,ql,qr,qwl,qwr,k,rt[n];

struct segt[n << 5];

void ins(int &x,int l,int r,int val,int ct,int

y)int qry_val(int

x,int l,int r,int

y)int qry(int

x,int l,int r,int

y)int main ()

scanf("%d",&m);

rep(i,m)

swap(qwl,qwr),qwl = 1,qwr --;

int cpp;

if(qwl > qwr)cpp = 0;

else cpp = qry_val(rt[qr],1,nn,rt[ql - 1]);

k = cpp + k;

printf("%d\n",qry(rt[qr],1,nn,rt[ql - 1]));

}return

0;}

t2:

給乙個點帶權有向圖,每個點有花費,你需要選擇一些點,使得拆掉這些點之後,不能從入度為0的點到達出度為0的點。

求最小的花費總和。

n<=1000,m<=6000

題解:

炸了。

t3:

給乙個數列,數列相當於一條彩帶,可以選擇把數列的某個位置x切開,拼接a[x,n]和a[1,x - 1]。

求拼接之後的最小字典序的數列。

例子:4 3 2 1

答案:1 4 3 2

題解:

最小表示法。

我們用兩個指標去掃,假設:

s[i - > i + k - 1] == s[j - > j + k - 1]

s[i + k] > s[j + k]

則: 考慮i有沒有可能是最終答案:

顯然不可能對吧,因為從j開始就比i優。

那麼i + 1可不可能是最終答案呢?

顯然j + 1比i + 1還要優。

所以s[i + k + 1]之後的才有可能作為最終答案。

我們就直接把i跳到i + k + 1的部分就成了。

總的複雜度顯然是o(n)的。

#include 

#include

#define rep(i,n) for(int i = 1;i <= n;i ++)

using namespace std;

ints[300005],n;

int get(int

*a) return i;

}int main ()

t3死因:字尾陣列寫不出來,水不過。

六一兒童節

六一兒童節,老師帶了很多好吃的巧克力到幼兒園。每塊巧克力j的重量為w j 對 於每個小朋友i,當他分到的巧克力大小達到h i 即w j h i 他才會上去表演節目。老師的目標是將巧克力分發給孩子們,使得最多的小孩上台表演。可以保證每個w i 0且不能將多塊巧克力分給乙個孩子或將一塊分給多個孩子。第一...

六一兒童節

六一兒童節,老師帶了很多好吃的巧克力到幼兒園。每塊巧克力j的重量為w j 對於每個小朋友i,當他分到的巧克力大小達到h i 即w j h i 他才會上去表演節目。老師的目標是將巧克力分發給孩子們,使得最多的小孩上台表演。可以保證每個w i 0且不能將多塊巧克力分給乙個孩子或將一塊分給多個孩子。imp...

寫在六一兒童節

六一兒童節,大朋友 小朋友們,節日快樂 感謝你們深夜點開我這長圖 好久沒有寫東西了,好幾次都有寫作的衝動,可是,每次提筆的時候感覺好沉重,又好匱乏的樣子,似乎有很多東西要表達,又無從下手,甚至於一兩個字都蹦不出來窘態,冥冥之中是自廢武功好幾年的感慨,是啊,自從那年的出走,文字寫作的習慣戛然而止,趁著...