QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#571578 | #9315. Rainbow Bracket Sequence | SmilingWeeping | WA | 1ms | 7724kb | C++98 | 1.1kb | 2024-09-18 00:46:11 | 2024-09-18 00:46:13 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2010;
ll n, a[N], rk[N], s[N], b[N][N], c[N][N], sb[N][N];
bool check(ll x) {
for(int i = 1; i <= n; i++) {
// 前缀和
s[i] = s[i-1] + (a[i]>x);
}
int cnt = 0;
for(int i = 1; i <= n; i++) {
for(int j = i; j <= n; j++) {
b[i][j] = !(j-i+1-s[j]+s[i-1] >= (j-i+2)/2);
}
}
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
sb[i][j] = sb[i-1][j] + sb[i][j-1]+b[i][j]-sb[i-1][j-1];
for(int i = 1; i <= n; i++)
for(int j = i; j <= n; j++) {
c[i][j] = (sb[j][i] - sb[i-1][j] - sb[i][j-1] + sb[i-1][j-1]);
int sz = (j-i+2)*(j-i+1)/2;
if(sz-c[i][j] >= (sz+1)/2)
cnt++;
}
return cnt >= (n*(n+1)/2+1)/2;
}
void solve() {
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i], rk[i] = a[i];
sort(rk+1, rk+n+1);
int l=1, r=n, mid;
while(l<=r) {
mid = (l+r) >> 1;
if(check(rk[mid]))
r = mid-1;
else l = mid+1;
}
cout << rk[l] << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
while(t--)
solve();
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 7724kb
input:
2 3 2 1 2 1 2 2 2 1 2 3 1 4 2 2 1 3 2 2 2 1 2 2 2 1 2 3 1 4 2 2 1
output:
2
result:
wrong answer 1st numbers differ - expected: '9', found: '2'