Submission #969767

#TimeUsernameProblemLanguageResultExecution timeMemory
969767modwweFinancial Report (JOI21_financial)C++17
100 / 100
534 ms240568 KiB
#pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx,avx2,sse,sse2") #include<bits/stdc++.h> #define int long long //#define ll long long #define down cout<<'\n'; #define NHP ios_base::sync_with_stdio(0);cout.tie(0);cin.tie(0); #define modwwe int t;cin>>t; while(t--) #define bit(i,j) (i>>j&1) #define sobit(a) __builtin_popcountll(a) #define task "test" #define fin(x) freopen(x".inp","r",stdin) #define fou(x) freopen(x".out","w",stdout) #define pb push_back #define checktime cerr << (double)clock() / CLOCKS_PER_SEC * 1000 << " ms"; using namespace std; void ngha(); const int mod2=1e9+7; const int mod1=998244353; struct ib { int a; int b; }; struct icd { int a,b; }; struct ic { int a,b,c; }; struct id { int a,b,c,d; }; struct ie { int a,b,c, d,e; }; int n,m,s1,s2,s4,s3,sf,k,r,mid,s5,s6,mx,s7,s8,s9,mx2,res,dem2=0,dem=0,l; int i,s10,s12; int el=29; main() { //#ifndef ONLINE_JUDGE /// fin(task),fou(task); //#endif NHP //modwwe // cin>>res; ngha(),down checktime } int bit[300001]; int t[1200001]; void upd1(int x,int y) { for(x; x; x-=x&-x) bit[x]=y; } int get(int x) { int ss=n+1; for(x; x<=n; x+=x&-x)ss=min(ss, bit[x]); return ss; } void upd(int node,int l,int r,int l1,int r1,int k) { if(l>r1||r<l1) return; if(l>=l1&&r<=r1) { t[node]=k; return; } int mid=l+r>>1; upd(node<<1,l,mid,l1,r1,k); upd(node<<1|1,mid+1,r,l1,r1,k); t[node]=max(t[node<<1],t[node<<1|1]); } int get(int node,int l,int r,int l1,int r1) { if(l1>r1) return 0; if(l>r1||r<l1) return 0; if(l>=l1&&r<=r1) return t[node]; int mid=l+r>>1; return max(get(node<<1,l,mid,l1,r1),get(node<<1|1,mid+1,r,l1,r1));; } deque<int> d; deque<int> de[300002]; vector<int> vv; vector<int> v[300002]; int a[300001]; int c[300001]; void ngha() { cin>>n>>k; for(int i=1; i<=n; i++) cin>>a[i],vv.pb(a[i]),bit[i]=n+1; sort(vv.begin(),vv.end()); for(int i=1; i<=n; i++) a[i]=lower_bound(vv.begin(),vv.end(),a[i])-vv.begin()+1; for(int i=n; i>=1; --i) { s2=get(a[i]+1); ///cout<<s2<<" "<<i,down v[s2].pb(i); while(!d.empty()&&a[i]<=a[d.back()])d.pop_back(); d.push_back(i); if(d.front()==i+k) d.pop_front(); upd1(a[d.front()],i+k-1); } for(int i=1; i<=n; i++) { if(i==n) { cout<<max(get(1,1,n,1,a[i]-1)+1,get(1,1,n,a[i],n)); return; } c[i]=get(1,1,n,1,a[i]-1)+1; while(!de[a[i]].empty()&&c[i]>=c[de[a[i]].back()])de[a[i]].pop_back(); de[a[i]].push_back(i); upd(1,1,n,a[i],a[i],c[de[a[i]].front()]); if(v[i].size()!=0) { ///cout<<i,down for(int z=v[i].size()-1; z>=0; --z) { s2=v[i][z]; s3=a[s2]; if(de[s3].front()==s2) { de[s3].pop_front(); if(de[s3].size()!=0) upd(1,1,n,s3,s3,c[de[s3].front()]); else upd(1,1,n,s3,s3,0); } } } } }

Compilation message (stderr)

Main.cpp:45:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   45 | main()
      | ^~~~
Main.cpp: In function 'void upd1(long long int, long long int)':
Main.cpp:60:9: warning: statement has no effect [-Wunused-value]
   60 |     for(x; x; x-=x&-x) bit[x]=y;
      |         ^
Main.cpp: In function 'long long int get(long long int)':
Main.cpp:65:9: warning: statement has no effect [-Wunused-value]
   65 |     for(x; x<=n; x+=x&-x)ss=min(ss, bit[x]);
      |         ^
Main.cpp: In function 'void upd(long long int, long long int, long long int, long long int, long long int, long long int)':
Main.cpp:76:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   76 |     int mid=l+r>>1;
      |             ~^~
Main.cpp: In function 'long long int get(long long int, long long int, long long int, long long int, long long int)':
Main.cpp:87:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   87 |     int mid=l+r>>1;
      |             ~^~
#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...