NOIP2017提高組正式賽 D2T3列隊

2021-08-11 04:43:12 字數 2552 閱讀 5939

sylvia 是乙個熱愛學習的女孩子。

前段時間,sylvia 參加了學校的軍訓。眾所周知,軍訓的時候需要站方陣。 sylvia所在的方陣中有n × m名學生,方陣的行數為 n,列數為 m。

為了便於管理,教官在訓練開始時,按照從前到後,從左到右的順序給方陣中從 1 到 n × m 編上了號碼(參見後面的樣例)。即:初始時,第 i 行第 j 列的學生的編號是(i − 1) × m + j。

然而在練習方陣的時候,經常會有學生因為各種各樣的事情需要離隊。在一天中,一共發生了 q 件這樣的離隊事件。每一次離隊事件可以用數對(y,z) (1≤x≤n,1≤y≤m)描述,表示第 x 行第 y 列的學生離隊。

在有學生離隊後,隊伍中出現了乙個空位。為了隊伍的整齊,教官會依次下達這樣的兩條指令:

1. 向左看齊。這時第一列保持不動,所有學生向左填補空缺。不難發現在這條指令之後,空位在第 x 行第 m 列。

2. 向前看齊。這時第一行保持不動,所有學生向前填補空缺。不難發現在這條指令之後,空位在第 n 行第 m 列。

教官規定不能有兩個或更多學生同時離隊。即在前乙個離隊的學生歸隊之後,下乙個學生才能離隊。因此在每乙個離隊的學生要歸隊時,隊伍中有且僅有第 n 行第 m 列乙個空位,這時這個學生會自然地填補到這個位置。

因為站方陣真的很無聊,所以 sylvia 想要計算每一次離隊事件中,離隊的同學的編號是多少。

對於前面6個資料就直接暴力,

7、8、9、10,q都很小可以o(

q2) 的方法。

對於所有事件x=1這一部分,

修改的只有第一行,還有最後一列會修改,維護一棵線段樹就可以了。

每次找第k大,然後在最加乙個數。

其實這一部分的解法已經很接近正解了,

正解就是n+1棵線段樹。

對於每一行,除去最後乙個位置,建n棵線段樹,

然後再對最後一列單獨建一棵線段樹,分別維護。

如果不在最後一列,

就先在對於那一行的線段樹裡面找到第k大的值,

並將這個點刪掉,

再在最後一列裡面找出對應的,加入到這一行裡面,刪掉這個位置。

最後將答案放到最後。

不能將所有點都儲存下來,要動態開節點。

#include 

#include

#include

#include

#include

#define ll long long

#define n 300003

#define x_ (x<<1)

#define mid ((l+r)>>1)

using namespace std;

struct node

t[60

*n+5];

ll ans,g[n*4];

inttr[n*8],pos,f[n];

int n,m,q,xx,yy,tot,mx;

char ch;

void read(int& n)

void write(ll x)

void kth(int

x,int l,int r,int

s) if(!t[x].l)

if(t[t[x].l].s

else kth(t[x].l,l,mid,s);

t[x].s=t[t[x].l].s+t[t[x].r].s;

} void ins(int

x,int l,int r,int z,ll y)

if(!t[x].l)

if(z<=mid)ins(t[x].l,l,mid,z,y);

else ins(t[x].r,mid+1,r,z,y);

t[x].s=t[t[x].l].s+t[t[x].r].s;

}int find(int

x,int l,int r,int

s)void del(int

x,int l,int r,int

s) if(mid

_+1,mid+1,r,s);

else del(x

_,l,mid,s);

tr[x]=tr[x

_]+tr[x

_+1];

}void add(int

x,int l,int r,int

s) if(mid

_+1,mid+1,r,s);

else add(x

_,l,mid,s);

tr[x]=tr[x

_]+tr[x

_+1];

}void build(int

x,int l,int r)

build(x

_,l,mid);

build(x

_+1,mid+1,r);

tr[x]=tr[x

_]+tr[x

_+1];

}int main()

return

0;}

NOIP2017提高組正式賽 逛公園

description 策策每天都會去逛公園,他總是從1號點進去,從 號點出來。策策喜歡新鮮的事物,他不希望有兩天逛公園的路線完全一樣,同時策策還是乙個特別熱愛學習的好孩子,他不希望每天在逛公園這件事上花費太多的時間。如果1號點到 號點的最短路長為 那麼策策只會喜歡長度不超過 的路線。策策同學想知道...

NOIP2017提高組正式賽 寶藏

description 參與考古挖掘的小明得到了乙份藏寶圖,藏寶圖上標出了 n 個深埋在地下的寶藏屋,也給出了這 n 個寶藏屋之間可供開發的 m 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發寶...

NOIP2017普及組正式賽 跳房子

這一題很有它的價值,我都要認真思考一番才能夠想到方法。先講一下題目大意 題目描述 跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。跳房子的遊戲規則如下 在地面上確定乙個起點,然後在起點右側畫 n 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字 整數 表示到達這個格...