Submission #1277013

#TimeUsernameProblemLanguageResultExecution timeMemory
1277013sasdeMoney (IZhO17_money)C++20
0 / 100
1 ms568 KiB
#include<bits/stdc++.h> using namespace std; bool M1; #define PI 3.14159265358979323846 #define sz(a) (int)a.size() #define all(x) x.begin(),x.end() #define ii pair<int,int> #define iii pair<int,ii> #define iv pair<ii,ii> #define se second #define fi first #define ffi fi.fi #define sfi se.fi #define sse se.se #define fse fi.se #define lt(i, c, d) for(int i = c; i <= d; ++i) #define fl(i, c, d) for(int i = d; i >= c; --i) #define pb push_back #define emb emplace_back #define emf emplace_front #define em emplace #define look_memory cerr<<'\n'<<abs(&M2-&M1)/1024.0/1024<<'\n' #define look_time cerr << "TIME : " << clock() * 0.001 << "s" <<'\n' const int N=1e6+5,lg=19,mod=1e9+7,inf=1e9,limi=1e6; mt19937 rd(chrono::steady_clock::now().time_since_epoch().count()); int Rand(int u,int v){ return u+rd()%(v-u+1); } int dx[]={1,0,-1,0,1,1,-1,-1}; int dy[]={0,-1,0,1,1,-1,1,-1}; int node,a[N],dp[N],lim[N],bit[N]; void update(int idx,int val){ while(idx<=limi){ bit[idx]+=val; idx+=idx&(-idx); } } int get(int idx){ int res=0; while(idx>0){ res+=bit[idx]; idx-=idx&(-idx); } return res; } int getrange(int l,int r){ if(l>=r)return 0; return get(r)-get(l-1); } int st[N*4]; void update(int id,int l,int r,int i,int val){ if(r==l){ st[id]=val; return ; } int mid=(r+l)>>1; if(i<=mid)update(id<<1,l,mid,i,val); else update(id<<1|1,mid+1,r,i,val); st[id]=min(st[id<<1],st[id<<1|1]); } int get(int id,int l,int r,int u,int v){ if(l>v||r<u)return inf; if(u<=l&&r<=v)return st[id]; int mid=(r+l)>>1; return min(get(id<<1,l,mid,u,v),get(id<<1|1,mid+1,r,u,v)); } bool M2; void solve(){ cin >> node; for(int i=1;i<=node;++i)cin >> a[i],dp[i]=inf; // dp[0]=0; // for(int i=1;i<=node;++i){ // dp[i]=min(dp[i],dp[i-1]+1); //// cout <<i<<'\n'; // for(int j=i-1;j>=1;--j){ // if(a[j]>a[j+1])break; // bool ok=true; // for(int x=1;x<=j;++x){ // if(a[j]<a[x]&&a[x]<a[i])ok=false; // } // if(!ok)break; // dp[i]=min(dp[i],dp[j-1]+1); //// cout <<j<<" "; // } //// cout<<'\n'; // } lim[1]=1; for(int i=2,vt=1;i<=node;++i){ if(a[i-1]>a[i]){ lim[i]=i; continue; } int j=lim[i-1]; while(vt<j){ // cerr <<vt<<" "<<a[vt]<<'\n'; update(a[vt],1); ++vt; } while(j<i&&getrange(a[j]+1,a[i]-1)){ update(a[vt],1); ++vt; ++j; } lim[i]=j; } for(int i=1;i<=node;++i)update(1,1,node,i,inf); for(int i=1;i<=node;++i){ update(1,1,node,i,dp[i-1]); dp[i]=get(1,1,node,lim[i],i)+1; } // for(int i=1;i<=node;++i)cerr <<a[i]<<" "<<lim[i]<<"\n"; cout <<dp[node]; cerr <<dp[node]; } main() { srand(time(0)); ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); #define task "a" if(fopen(task".inp","r")){ freopen(task".inp","r",stdin); freopen(task".out","w",stdout); } int t=1; // cin >> t; while(t--){ solve();cout<<'\n'; } look_memory; look_time; }

Compilation message (stderr)

money.cpp:116:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  116 | main()
      | ^~~~
money.cpp: In function 'int main()':
money.cpp:124:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  124 |       freopen(task".inp","r",stdin);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
money.cpp:125:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  125 |       freopen(task".out","w",stdout);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...