| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:[附代码/求解/没过的请自行思考&别偷看]为何这里用STL的二分查找会出错?不解...求指点In Reply To:[附代码/求解/没过的请自行思考&别偷看]为何这里用STL的二分查找会出错?不解...求指点 Posted by:3013216027 at 2014-11-30 15:49:10 > #include <cstdio>
> #include <cstring>
> #include <climits>
> #include <algorithm>
>
> const int MAX = 100007;
> int a[MAX], d[MAX];
>
> inline int read() {
> char ch;
> while ((ch = getchar()) < '0' || ch > '9');
> int x = ch - '0';
> while ((ch = getchar()) >= '0' && ch <= '9') {
> x = (x << 3) + (x << 1) + ch - '0';
> }
> return x;
> }
>
> int upper_bound(int l, int r, int x) {
> int mid;
> while (l < r) {
> mid = (l + r) >> 1;
> if (x > d[mid]) {
> l = mid + 1;
> } else {
> r = mid;
> }
> }
> return l;
> }
>
> void write(int x) {
> if (!x) return;
> write(x / 10);
> putchar(x % 10 + '0');
> }
>
> int main() {
> int n;
> d[0] = INT_MIN;
> while (~scanf(" %d", &n)) {
> for (int i = 1; i <= n; ++i) {
> a[i] = read();
> }
>
> int maxLen = 0, ind;
> for (int i = 1; i <= n; ++i) {
> if (a[i] > d[maxLen]) d[++maxLen] = a[i];
> else {
> ind = upper_bound(1, maxLen, a[i]);
> //ind = std::upper_bound(d + 1, d + maxLen + 1, a[i]) - d;这里用STL的upper_bound为啥会错?我也不知道...
> d[ind] = a[i];
> }
> }
> //printf("%d\n", maxLen);
> write(maxLen);
> putchar('\n');
> }
> return 0;
> }
> 就是上面求ind得那句,当然我并不了解STL中upper_bound的机制,在cplusplus.com中看了一下,对于STL自己封装的诸如vector好像没什么问题,就是不知道对普通的数组它会怎么处理?而且之前用从来没有遇到过问题。如果有谁知道,务必赐教!不胜感谢!
应该使用lower_bound
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator