雜題練習10 11

2021-08-29 10:16:52 字數 3920 閱讀 1332

uva1428

樹狀陣列思博題,然鵝漏了l > mid > r的情況……我是不是該補腦了

#include #define ll long long

#define db double

using namespace std;

const int maxn = 100100;

const int lim = 100000;

const int inf = 0x3f3f3f3f;

templateinline void checkmax(t &a, t b)

templateinline void checkmin(t &a, t b)

template inline void read(t &x)

}for (; isdigit(c); c = getchar())

if (f)

}#define lowbit(x) (x & -x)

int bit[maxn], n, a[maxn];

void update(int x, int y)

int query(int x)

int l[maxn], r[maxn], l2[maxn], r2[maxn];

void solve()

memset(bit, 0, sizeof(bit));

for(int i = n; i; i--)

long long ans = 0;

for(int i = 2; i < n; i++) ans += (long long) l[i] * (long long) r[i];

for(int i = 2; i < n; i++) ans += (long long) l2[i] * (long long) r2[i];

printf("%lld\n", ans);

}int t;

signed main()

return 0;

}

uva11235

蜜汁rmq,xjb維護一下同乙個值的區間長度,特判l r是同乙個值的情況和l r是相鄰區間的情況

#include #define ll long long

#define db double

using namespace std;

const int maxn = 100100;

const int maxe = 400400;

const int inf = 0x3f3f3f3f;

templateinline void checkmax(t &a, t b)

templateinline void checkmin(t &a, t b)

template inline void read(t &x)

}for (; isdigit(c); c = getchar())

if (f)

}int f[maxn][19], a[maxn], n, q;

int belong[maxn], l[maxn], r[maxn], cnt, len[maxn];

void update() }}

int query(int x, int y)

signed main()

belong[i] = cnt;

} r[cnt] = n, len[cnt] = n - l[cnt] + 1;

update();

while(q--)

int l = r[belong[x]] - x + 1;

int r = y - l[belong[y]] + 1;

x = belong[x] + 1;

y = belong[y] - 1;

if(x > y)

int ans = l;

checkmax(ans, r);

checkmax(ans, query(x, y));

printf("%d\n", ans);

} main();

}

uva1513

開雙倍空間,將初始陣列插入到maxn + 1到maxn + n,之後的操作按題意模擬,用樹狀陣列維護字首和即可

#include #define ll long long

#define db double

using namespace std;

const int maxn = 200200;

const int lim = 100002;

const int inf = 0x3f3f3f3f;

templateinline void checkmax(t &a, t b)

templateinline void checkmin(t &a, t b)

template inline void read(t &x)

}for (; isdigit(c); c = getchar())

if (f)

}#define lowbit(x) (x & -x)

int bit[maxn], n, a, q, t, cnt = lim - 1, pos[maxn >> 1];

void update(int x, int y)

int query(int x)

signed main()

} return 0;

}

uva12299

線段樹/樹狀陣列板題,按題意模擬即可……最難的地方居然是輸入

#include #define ll long long

#define db double

using namespace std;

const int maxn = 100100;

const int maxe = 400400;

const int inf = 0x3f3f3f3f;

templateinline void checkmax(t &a, t b)

templateinline void checkmin(t &a, t b)

template inline void read(t &x)

}for (; isdigit(c); c = getchar())

if (f)

}struct segmenttree

}tre[maxe];

#define ls(x) x << 1

#define rs(x) x << 1 | 1

int n, q, a[maxn];

char s[35];

int opt[35], num[35];

void push_up(int x)

void build(int x, int l, int r)

int mid = (l + r) >> 1;

build(ls(x), l, mid);

build(rs(x), mid + 1, r);

push_up(x);

}void update(int x, int pos, int val)

int mid = (l + r) >> 1;

if(pos <= mid) update(ls(x), pos, val);

else update(rs(x), pos, val);

push_up(x);

}int query(int x, int l, int r)

int get_number(char * str)

else if(flag) opt[++dex] = 0;

}return dex;}

signed main()

else

} }return 0;

}

1011 容易的題

題目描述 大家都很關心考試難易程度。k老師出題有乙個規律,在出題之前,他會隨機寫下乙個字串,只要這個字串中能按順序找到e,a,s,y四個字母。他出題就會比較簡單。你拿到了這個字串,請你告訴考試的題目難不難吧。輸入 輸入資料有多組,每組佔一行,由乙個字串組成 字串的長度不超過1000 輸出 對於每組輸...

練習四1011草兒。。

input 輸入資料有多組,每組的第一行是三個整數t,s和d,表示有t條路,和草兒家相鄰的城市的有s個,草兒想去的地方有d個 接著有t行,每行有三個整數a,b,time,表示a,b城市之間的車程是time小時 1 a,b 1000 a,b 之間可能有多條路 接著的第t 1行有s個數,表示和草兒家相連...

POJ 1011 剪枝練習

題意 給定n條拆掉的棍子,問能湊成最短的多條相同長度棍子的最短長度 x 當前第幾條正在合成的棍子 y 目前正在嘗試的拆掉的棍子 z 當前長度 剪枝方案 1.按照長度單調性排序,減少重複搜尋 2.如果當前拼接棍子失敗,那接下來相同長度也會失敗 3.第一條棍子就失敗就不必搜尋了 h e a d int ...