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 ...