題目看這裡
也是非常簡單的線段樹合併模板題了,雖然實際上最好的做法因該是開陣列合併(這樣是均攤o(1)的)
不過還算跑的快,第四
#pragma gcc opitmize("o3")#pragma g++ opitmize("o3")
#include#include#include#define mid (l+r>>1)
#define n 100010
using namespace std;
struct tree s[
1700010
];int rt[n],n,m,cnt=
0,rev[n];
char c[n];
struct set
inline
void remove(
int x)
inline
void insert(
int x)
inline
int gpre(
int x)
return-1
; }
inline
int gsuc(
int x)
return n+1;
}} t;
inline
void ps(
int x)
void insert(
int l,
int r,
int& x,
int k)
int merge(
int l,
int r,
int r1,
int r2)
s[r1].l=merge(l,mid,s[r1].l,s[r2].l);
s[r1].r=merge(mid+
1,r,s[r1].r,s[r2].r);
ps(r1);
return r1;
}else return r1+r2;
}void split(
int l,
int r,
int x,
int k,
int& r1,
int& r2)
if(l==r)
if(s[s[x].l].s>=k)
else
}void join(
int l,
int r,
int o)
rev[l]=o;
}void cut(
int p)
void print(
int l,
int r,
int x,
int o)
if(o)
else
}int
main
()for
(int x=
1;x<=n;x=t.gsuc(x+1))
print(0,
25,rt[x],rev[x]);
}
51 字母統計 上交複試 c
輸入一行字串,計算其中a z大寫字母出現的次數 案例可能有多組,每個案例輸入為一行字串。對每個案例按a z的順序輸出其中大寫字母出現的次數。輸入dfjeiwfnqlef0395823048 jdlsfjdlsjfkk 輸出a 0 b 0c 0 d 3e 2 f 5g 0 h 0i 1 j 4k 2 ...
sdnu 1031 字母排序(拓撲排序的利用)
很明顯是拓撲排序的利用。注意事項 1.記錄下輸入到第幾個條件,產生矛盾或者已經排好序。2.在有矛盾且m n 1的情況下,不能輸出無法確定順序。如下 感覺寫的不夠簡練,暫且這樣了 include include include include includeusing namespace std ve...
分類按照拼音第一字母排序顯示實現
首先寫乙個提取品牌第一字母的函式 其實 這是最重要的 dict array a 0xb0c4,b 0xb2c0,c 0xb4ed,d 0xb6e9,e 0xb7a1,f 0xb8c0,g 0xb9fd,h 0xbbf6,j 0xbfa5,k 0xc0ab,l 0xc2e7,m 0xc4c2,n 0x...