QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#535907 | #8904. Рекорды и антирекорды | Dimash# | 0 | 55ms | 7656kb | C++23 | 3.0kb | 2024-08-28 16:26:12 | 2024-08-28 16:26:14 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 12, MOD = 998244353;
int n,a[N],mn[N],c[N];
int t[N * 4],dp[N];
void upd(int pos,int val,int v = 1,int tl = 1,int tr = n) {
if(tl == tr) {
t[v] = val;
} else {
int tm = (tl + tr) >> 1;
if(pos <= tm) upd(pos,val,v+v,tl,tm);
else upd(pos,val,v+v+1,tm+1,tr);
t[v] = max(t[v + v],t[v + v + 1]);
}
}
int get(int l,int r,int v = 1,int tl = 1,int tr = n) {
if(l > r || tl > r || l > tr) return 0;
if(tl >= l && tr <= r) return t[v];
int tm = (tl + tr) >> 1;
return max(get(l,r,v+v,tl,tm),get(l,r,v+v+1,tm+1,tr));
}
int calc(vector<int> &x,int prev) {
int res = 0;
sort(x.begin(),x.end());
for(int j:x) {
int i = a[j];
if(i > prev) continue;
dp[i] = get(i + 1,n) + 1;
upd(i,dp[i]);
res = max(res,dp[i]);
}
for(int i:x) {
upd(a[i],0);
}
return res;
}
int solve() {
vector<int> DP(n + 1,1),P(n + 1,0);
mn[0] = n + 1;
for(int i = 1;i <= n;i++) {
c[i] = c[i - 1];
if(mn[i - 1] > a[i]) {
mn[i] = a[i];
c[i]++;
} else {
mn[i] = mn[i - 1];
}
}
int res = 2;
for(int i = n;i >= 1;i--) {
P[i] = n + 1;
vector<bool> bad(n+1,false);
vector<int> vars;
for(int j = i + 1;j <= n;j++) {
if(a[j] > a[i] && DP[j] + 1 > DP[i]) {
DP[i] = DP[j] + 1;
P[i] = j;
vars.clear();
vars.push_back(j);
} else if(a[j] > a[i] && DP[j] + 1 == DP[i]) {
vars.push_back(j);
}
}
int mx = -1,opt = n +1;
// cout << (int)vars.size() << "x\n";
for(int k:vars) {
vector<int> lef;
P[i] = k;
for(int f = 1;f <= n;f++) {
bad[f] = 0;
}
int it = i;
while(it <= n) {
bad[it] = 1;
// cout << it << ' ';
it = P[it];
}
// cout << '\n';
for(int j = i + 1;j <= n;j++) {
if(!bad[j]) {
lef.push_back(j);
}
}
int val = calc(lef,n + 1);
if(val > mx) {
mx = val;
opt = k;
res = max(res,c[i - 1] + DP[i] + calc(lef,mn[i - 1]));
}
}
P[i] = opt;
}
return res;
}
void test() {
cin >> n;
for(int i = 1;i <= n;i++) {
cin >> a[i];
}
int res = solve();
for(int i = 1;i <= n;i++) {
a[i] = n - a[i] + 1;
}
res = max(res,solve());
cout << res << '\n';
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int t = 1;
cin >> t;
while(t--) {
test();
}
}
详细
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 21
Accepted
time: 1ms
memory: 7652kb
input:
120 5 3 1 4 2 5 5 3 4 2 5 1 5 5 4 2 1 3 5 1 2 5 4 3 5 2 4 3 1 5 5 3 1 5 2 4 5 1 4 2 3 5 5 5 1 4 3 2 5 1 5 3 2 4 5 3 1 2 5 4 5 3 1 5 4 2 5 1 2 3 4 5 5 1 5 2 4 3 5 3 5 2 1 4 5 2 1 5 4 3 5 1 5 3 4 2 5 3 1 4 5 2 5 2 1 4 5 3 5 1 3 5 4 2 5 5 3 4 2 1 5 2 1 3 5 4 5 2 3 1 5 4 5 2 4 3 5 1 5 4 3 2 5 1 5 4 5 2 ...
output:
5 5 5 5 5 4 5 5 5 4 4 5 5 5 4 5 5 4 5 5 4 4 5 5 4 5 4 5 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 4 5 5 5 4 5 5 5 5 4 5 5 5 5 5 5 4 5 5 5 5 5 5 4 5 4 5 5 5 5 4 5 5 4 5 4 5 4 5 5 4 4 4 4 5 5 4 4 5 5 5 4 5 4 5 5 5 4 5 4 5 5 4 4 5 5 5 4 5 5 5 5
result:
ok 120 numbers
Test #2:
score: 0
Wrong Answer
time: 4ms
memory: 7656kb
input:
120 16 11 8 4 12 3 6 10 9 7 15 14 2 16 5 1 13 16 9 1 13 14 3 7 5 15 4 11 2 12 8 6 16 10 16 3 12 11 10 5 13 4 8 9 2 7 16 6 14 15 1 16 9 4 7 2 3 8 1 13 5 12 16 14 11 10 6 15 16 14 5 11 10 6 12 7 9 1 16 15 3 4 8 13 2 16 3 13 16 10 5 11 8 4 15 2 9 7 14 1 6 12 16 4 16 7 11 15 5 9 14 8 13 6 3 1 2 12 10 16...
output:
10 10 12 9 10 10 11 12 10 11 9 10 10 9 12 11 12 10 10 12 10 8 11 10 10 11 11 11 10 11 10 10 11 11 11 12 12 10 13 11 11 11 11 10 10 12 10 11 11 9 10 11 10 11 11 13 12 10 11 11 11 10 9 10 12 10 12 11 11 10 11 11 9 12 11 9 11 11 11 12 10 10 12 11 9 11 12 10 9 12 13 10 9 12 11 11 12 11 11 13 11 10 9 10 ...
result:
wrong answer 5th numbers differ - expected: '11', found: '10'
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Skipped
Dependency #1:
0%
Subtask #4:
score: 0
Skipped
Dependency #1:
0%
Subtask #5:
score: 0
Wrong Answer
Test #49:
score: 0
Wrong Answer
time: 55ms
memory: 7656kb
input:
9000 8 4 1 2 3 5 6 7 8 12 1 2 12 3 4 5 6 7 8 9 10 11 15 4 1 13 2 15 3 5 6 7 8 9 10 11 12 14 15 4 5 10 14 1 2 3 6 7 8 9 11 12 13 15 9 4 1 2 3 5 6 7 8 9 13 1 4 9 12 2 3 5 6 7 8 10 11 13 14 1 10 2 3 4 5 6 7 8 9 11 12 13 14 15 1 6 7 2 3 4 5 8 9 10 11 12 13 14 15 12 1 4 6 10 12 2 3 5 7 8 9 11 8 7 8 1 2 3...
output:
8 12 13 12 9 11 14 14 9 7 12 15 6 13 8 9 8 11 10 5 7 9 11 12 8 6 14 6 6 10 6 9 8 13 6 14 13 5 6 5 9 13 6 12 14 8 4 13 12 8 9 9 11 9 13 6 6 5 11 11 11 6 5 14 13 14 12 6 14 8 8 9 7 9 15 10 7 14 8 11 5 6 8 12 9 8 12 8 9 10 8 6 10 11 10 15 12 11 12 7 8 7 9 7 13 6 12 5 7 9 10 8 13 6 7 8 13 12 10 5 9 10 7...
result:
wrong answer 4845th numbers differ - expected: '7', found: '8'
Subtask #6:
score: 0
Skipped
Dependency #1:
0%