Submission #135587

#TimeUsernameProblemLanguageResultExecution timeMemory
135587ckodserAliens (IOI16_aliens)C++14
25 / 100
500 ms5496 KiB
#include "aliens.h" #include<bits/stdc++.h> #define ll int #define pb push_back #define mp make_pair #define ld long double #define F first #define S second #define pii pair<ll,ll> using namespace :: std; const ll maxn=4100; const ll maxk=4010; const ll inf=1e9+900; const ll logg=20; ll tav2(ll x){ return x*x; } ll mx[maxn]; ll dp[maxn][maxk]; ll ff[maxn][logg]; ll tt[maxn]; ll last[maxn]; ll findMn(ll l,ll r){ ll tol=r-l+1; return min(ff[l][tt[tol]],ff[r-(1<<tt[tol])+1][tt[tol]]); } ll cost(ll i,ll x){ ll t=findMn(x+1,i); if(mx[x]>=t){ return inf; }if(t>x){ return tav2(i-t+1); } return tav2(i-t+1)-tav2(x-t+1); } long long take_photos(int n, int m, int k, vector<int> r, vector<int> c) { swap(n,m); fill(mx,mx+maxn,inf); for(ll i=0;i<m;i++){ if(c[i]>r[i]){ swap(c[i],r[i]); } mx[r[i]]=min(mx[r[i]],(ll)c[i]); } for(ll i=0;i<n;i++){ ff[i][0]=mx[i]; } tt[1]=0; for(ll i=2;i<maxn;i++){ tt[i]=tt[i/2]+1; } for(ll i=1;i<logg;i++){ for(ll j=0;j<n;j++){ ll res=j+(1<<(i-1)); if(res>=n){ ff[j][i]=ff[j][i-1]; }else{ ff[j][i]=min(ff[j][i-1],ff[res][i-1]); } } } vector<ll> imp; for(ll i=1;i<=n;i++){ if(mx[i-1]!=inf)imp.pb(i); dp[i][0]=inf; } for(ll j=1;j<=k;j++){ for(auto i:imp){ dp[i][j]=tav2(i-findMn(0,i-1)); for(auto x:imp){ if(x==i)break; dp[i][j]=min(dp[i][j],dp[x][j-1]+cost(i-1,x-1)); } } } return dp[imp.back()][k]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...