列隊題解以及注意事項

2022-05-05 19:45:06 字數 1311 閱讀 5490

這道題顯然要使用資料結構維護。但是n的規模十分大。我們便可以開n棵線段樹,動態開點。但是最後一列比較特殊,所以我們再開一棵線段樹維護最後一列。至於怎麼操作?我們考慮權值線段樹。權值線段樹一般是維護:權值為[l,r]的數有多少是滿足某種條件的。本道題目中我們維護區間[l,r]中有多少個數沒有操作過。線段樹的長度要開為 max(n,m)+q,這樣如果我們查詢乙個數的位置發現她超過了m,說明她已經不在原位置了,出去的數我們用vector儲存,每次直接訪問下標就可以查詢了。這裡的原理就是查詢該行排名為k的點。發現這個點之後就將其壓入維護最後一列的vector中,並將此時在最後一列中排名為k的點壓入改行,就行了。注意特判詢問的縱座標為m的情況

code:

#include#include#include#include#include#include#include#include#define max max

#define maxn 5000006

#define mod 1000000007

#define rep(i,a,b) for (int i=a;i<=b;++i)

#define erep(i,a) for (int i=head[a];i!=-1;i=e[i].next)

#define half (l+r)>>1

#define lson t[s].lc

#define pb push_back

#define all (zmd)

#define rson t[s].rc

using namespace std;

#define int long long

struct zmd

;struct hzw

t[maxn];

int n,m,mx,tot,q;

inline int max(int a,int b)

inline void update(int &s,int l,int r,int p)

int mid=half;

if (p<=mid) update(lson,l,mid,p);

else update(rson,mid+1,r,p);

t[s].sum=t[lson].sum+t[rson].sum;

}int root[maxn];

inline int query(int s,int l,int r,int p)

vectorv[300006];

inline int solve1(int x,int y)

return 0;

}

看,十分玄妙,所以不要亂define了

C 多型以及其注意事項

1 虛函式 覆蓋以及多型的概念 1 class 基類 的成員函式,稱為虛函式或方法。2 覆蓋 如果子類的成員函式和基類的虛函式具有 相同 的函式原型,那麼該成員函式就也是虛函式,無論其是否帶有virtual關鍵字,且對基類中的虛函式構成覆蓋。class 子類 public 基類 3 多型 如果子類提...

靜態的特點以及注意事項

static方法是類中的乙個成員方法,屬於整個類,即使不用建立任何物件也可以直接呼叫 優先於物件存在,被所有物件所共享 靜態方法 效率上要比例項化高,靜態方法 的缺點是不自動進行銷毀,而例項化的則可以做銷毀。靜態會隨著類的消失而消失,說明他的生命週期最長 1 靜態方法只能訪問靜態成員 2 靜態方法中...

git基本操作,以及注意事項

1 首先應該去把乙個專案轉殖下來 git clone 專案位址 這樣你才能獲得專案的分支,2 提交步驟 a git add 注意 add 後面有 而且需要有空格 b git commit m 引號後面為提交需要寫的說明 c git push 當只有一條主分支時,可以直接用 否則用 git push ...