답안 #948236

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
948236 2024-03-18T00:46:52 Z ezzzay Global Warming (CEOI18_glo) C++14
25 / 100
2000 ms 23884 KB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ff first
#define ss second
#define pb push_back
#define double long double
const int N=2e5+5;
int a[N];
int dp[N];
int b[N];
int n;
int fun(int l, int r, int x){
    
    for(int i=0;i<60;i++){
        dp[i]=0;
    }
    
    for(int i=1;i<=n;i++){
        if(l<=i and i<=r)b[i]=a[i]-x;
        else b[i]=a[i];
    }
    int s=0;
    for(int i=1;i<=n;i++)dp[i]=1;
    for(int i=2;i<=n;i++){
        for(int j=i-1;j>=1;j--){
            if(b[i]>b[j])dp[i]=max(dp[i],dp[j]+1);
            s=max(s,dp[i]);
        }
    }
    return s;
}
int st[4*N];
void update(int node, int L, int R, int idx, int val){
    if(L==R){
        st[node]=val;
        return ;
    }
    int mid=(L+R)/2;
    if(L<=idx and idx<=mid){
        update(node*2,L,mid,idx,val);
    }
    else {
        update(node*2+1,mid+1,R,idx,val);
    }
    st[node]=max(st[node*2],st[node*2+1]);
}
int find(int node, int L , int R, int l, int r){
    if(l>R or L>r)return 0;
    if(l<=L and R<=r)return st[node];
    int mid=(L+R)/2;
    return max( find(node*2,L,mid,l,r) , find(node*2+1,mid+1,R,l,r)) ;
}
void sbtsk4(){
    map<int,int>mp;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        mp[a[i]];
    }
    int ans=0;
    int idx=1;
    for(auto it=mp.begin();it!=mp.end();it++){
        it->ss = idx++;
    }
    for(int i=1;i<=n;i++)a[i]=mp[a[i]];
    for(int i=1;i<=n;i++){
        dp[i]= find(1,1,n,1,a[i]-1)+1;
        dp[i]=max(dp[i],1LL);
        ans=max(dp[i],ans);
        update(1,1,n,a[i],dp[i]);
    }
    cout<<ans;
}
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int x;
    cin>>n>>x;
    if(x==0){
        sbtsk4();
        return 0;
    }
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int ans=0;
    for(int l=1;l<=n;l++){
        for(int r=l+1;r<=n;r++){
            for(int p= -x;p<=x;p++){
                ans=max(ans,fun(l,r,p));
            }
        }
    }
    cout<<ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6488 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6492 KB Output is correct
9 Correct 1 ms 6492 KB Output is correct
10 Correct 1 ms 6488 KB Output is correct
11 Correct 1 ms 6488 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6488 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6492 KB Output is correct
9 Correct 1 ms 6492 KB Output is correct
10 Correct 1 ms 6488 KB Output is correct
11 Correct 1 ms 6488 KB Output is correct
12 Correct 66 ms 6492 KB Output is correct
13 Correct 1 ms 6492 KB Output is correct
14 Correct 209 ms 6592 KB Output is correct
15 Correct 93 ms 6596 KB Output is correct
16 Correct 77 ms 6492 KB Output is correct
17 Correct 1 ms 6496 KB Output is correct
18 Correct 2 ms 6492 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6488 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6492 KB Output is correct
9 Correct 1 ms 6492 KB Output is correct
10 Correct 1 ms 6488 KB Output is correct
11 Correct 1 ms 6488 KB Output is correct
12 Correct 66 ms 6492 KB Output is correct
13 Correct 1 ms 6492 KB Output is correct
14 Correct 209 ms 6592 KB Output is correct
15 Correct 93 ms 6596 KB Output is correct
16 Correct 77 ms 6492 KB Output is correct
17 Correct 1 ms 6496 KB Output is correct
18 Correct 2 ms 6492 KB Output is correct
19 Execution timed out 2059 ms 6492 KB Time limit exceeded
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 210 ms 23716 KB Output is correct
2 Correct 218 ms 23884 KB Output is correct
3 Correct 199 ms 23560 KB Output is correct
4 Correct 234 ms 23752 KB Output is correct
5 Correct 81 ms 16468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2056 ms 6744 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2068 ms 6492 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6488 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6492 KB Output is correct
9 Correct 1 ms 6492 KB Output is correct
10 Correct 1 ms 6488 KB Output is correct
11 Correct 1 ms 6488 KB Output is correct
12 Correct 66 ms 6492 KB Output is correct
13 Correct 1 ms 6492 KB Output is correct
14 Correct 209 ms 6592 KB Output is correct
15 Correct 93 ms 6596 KB Output is correct
16 Correct 77 ms 6492 KB Output is correct
17 Correct 1 ms 6496 KB Output is correct
18 Correct 2 ms 6492 KB Output is correct
19 Execution timed out 2059 ms 6492 KB Time limit exceeded
20 Halted 0 ms 0 KB -