제출 #1140199

#제출 시각아이디문제언어결과실행 시간메모리
1140199liangjeremyRabbit Carrot (LMIO19_triusis)C++20
0 / 100
2 ms1096 KiB
#include<bits/stdc++.h> #include<random> using namespace std; using db=double; using ll=long long; using sll=__int128;//super long long using lb=long double;//lb is slow //numbers for hashing: b(19260817),mod(998244353) // freopen("lasers.in", "r", stdin); // freopen("lasers.out", "w", stdout); class BinaryIndexedTree{ private: vector<ll>bit; public: BinaryIndexedTree(ll n){ bit.resize(n+1); } void update(ll index, ll delta){ while(bit.size()>index){ bit[index]=min(bit[index],delta); index+=index&-index; } } ll query(ll index){ ll mx=1e18; while(index>0){ mx=min(mx,bit[index]); index-=index&-index; } if(mx==1e9)mx=0; return mx; } }; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n,m; cin>>n>>m; vector<ll>a(n+1); map<ll,vector<ll>>mp; for(ll i=1; i<=n; i++){ cin>>a[i]; a[i]-=i*m; mp[a[i]].push_back(i); } mp[a[0]].push_back(0); vector<ll>b(n+1); ll count=n+10; for(auto x:mp){ count--; for(auto y:x.second){ b[y]=count; } } BinaryIndexedTree BIT(n+13); vector<ll>dp(n+1); ll start=1; while(a[start]-m>a[start-1] && start<=n){ a[start]=a[start-1]; start++; } for(ll i=start; i<=n; i++){ dp[i]=i-1+BIT.query(b[i]); BIT.update(b[i],dp[i]-i); } cout<<dp[n]+start-1<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...