Submission #1066002

#TimeUsernameProblemLanguageResultExecution timeMemory
1066002Rafi22Peru (RMI20_peru)C++14
49 / 100
800 ms42364 KiB
    #include "peru.h"
    #include <bits/stdc++.h>
    using namespace std;
     
    #ifdef DEBUG
    auto&operator<<(auto&o,pair<auto,auto>p){return o<<"("<<p.first<<", "<<p.second<<")";}
    auto operator<<(auto&o,auto x)->decltype(x.end(),o){o<<"{";int i=0;for(auto e:x)o<<","+!i++<<e;return o<<"}";}
    #define debug(X...)cerr<<"["#X"]: ",[](auto...$){((cerr<<$<<"; "),...)<<endl;}(X)
    #else
    #define debug(...){}
    #endif
     
    #define ll long long
    #define ld long double
    #define endl '\n'
    #define st first
    #define nd second
    #define pb push_back
    #define sz(x) (int)(x).size()
    #define all(x) (x).begin(), (x).end()
    #define FOR(i,l,r) for(int i=(l);i<=(r);i++)
    #define ROF(i,r,l) for(int i=(r);i>=(l);i--)
    int inf=2000000007;
    ll infl=1000000000000000007;
    ll mod=1000000007;
    ll mod1=998244353;
     
    const int N=2500007;
     
    //ll DP1[N];
    
    int X[N];
    int L,R;
     
    ll DP[N];
    int a[N];
     
    int solve(int n,int k,int* v)
    {
    	FOR(i,1,n) a[i]=v[i-1];
    	a[0]=inf,a[n+1]=inf;
    	R++;
    	FOR(i,1,n+1)
    	{
    		int last=-1;
    		while(L<R&&a[X[R]]<a[i]) 
    		{
    			if(L<R&&last!=-1) DP[i-1]=min(DP[i-1],DP[X[R]]+last);
    			last=a[X[R]];
    			R--;
    		}
    		if(L<R&&last!=-1) DP[i-1]=min(DP[i-1],DP[X[R]]+last);
    		ROF(j,i-2,1)
    		{
    			if(DP[j]<=DP[i-1]) break;
    			DP[j]=DP[i-1];
    		}
    		if(L<R&&X[L+1]<=i-k) L++;
    		X[++R]=i;
    		if(i==n+1) break;
    		DP[i]=DP[max(0,i-k)]+a[X[L+1]];
    	}
    	ll h=0;
    	FOR(i,1,n) h=(23*h+DP[i])%mod;
        return (int)h;
    }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...