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 |
[附代码/求解/没过的请自行思考&别偷看]为何这里用STL的二分查找会出错?不解...求指点#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好像没什么问题,就是不知道对普通的数组它会怎么处理?而且之前用从来没有遇到过问题。如果有谁知道,务必赐教!不胜感谢! Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator