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 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字 整數 表示到達這個格...