#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;
#define D(x)
vector<int> a,b;
int main() {
int n,x,v;
scanf("%d", &n);
for(int i=0;i<n;i++) {
scanf("%d", &x);
a.push_back(x);
}
b = a;
reverse(begin(b), end(b));
for(int i=1;i<n;i++) a[i] = max(a[i-1],a[i]);
for(int i=1;i<n;i++) b[i] = max(b[i-1],b[i]);
long ai=0,bi=0, m, r = 1, p, l;
for(int d=n-1;d>0;d--) {
m = (2*n+1 - d) /2;
while(a[ai]<m) ai++;
while(b[bi]<m) bi++;
l = (n-d);
p = min(ai,l)+min(bi,l) - l + 1;
D(printf("d:%d l:%d m:%d (%d,%d) p: %d\n", d,l , m ,ai, bi, p));
if (p > 0) r+=p;
}
printf("%ld %ld\n",2*n+1,r);
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <vector> #include <cstdio> #include <algorithm> using namespace std; #define D(x) vector<int> a,b; int main() { int n,x,v; scanf("%d", &n); for(int i=0;i<n;i++) { scanf("%d", &x); a.push_back(x); } b = a; reverse(begin(b), end(b)); for(int i=1;i<n;i++) a[i] = max(a[i-1],a[i]); for(int i=1;i<n;i++) b[i] = max(b[i-1],b[i]); long ai=0,bi=0, m, r = 1, p, l; for(int d=n-1;d>0;d--) { m = (2*n+1 - d) /2; while(a[ai]<m) ai++; while(b[bi]<m) bi++; l = (n-d); p = min(ai,l)+min(bi,l) - l + 1; D(printf("d:%d l:%d m:%d (%d,%d) p: %d\n", d,l , m ,ai, bi, p)); if (p > 0) r+=p; } printf("%ld %ld\n",2*n+1,r); } |
English