#include<bits/stdc++.h> #define maxn 20000005 #define ll long long #define put() putchar('\n') usingnamespace std; inlinevoidread(int &x){ int f=1;x=0;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();} x*=f; } int n,k,mod; bitset<200000005>vis; int prime[maxn],cnt; inlinevoidoula(int n){ int i,j;vis[1]=1; for (i=2;i<=n;i++) { if (!vis[i]) prime[++cnt]=i; for (j=1;j<=cnt&&i*prime[j]<=n;j++){ vis[i*prime[j]]=1; if (i%prime[j]==0) break; } } } inlineintS(int x){ return1ll*prime[x]*x%mod; } inlineintS2(int x){ returnS(x)+S(x/10+1); } int t[maxn]; signedmain(void){ int i,j;ll ans=0; srand(time(0)); read(n);read(k);read(mod); oula(200000000); int now=0,sum=0,now2=0,sum2=0; for (i=1;i<k;i++) t[S2(i)]++; if (k%2==1) { for (i=k;i<=n;i++) { t[S2(i)]++; if (S2(i)<=now) sum++; while (sum<(k+1)/2) now++,sum+=t[now]; while (sum-t[now]>=(k+1)/2) sum-=t[now],now--; if (k&1) ans+=now; t[S2(i-k+1)]--; if (S2(i-k+1)<=now) sum--; } if (k&1) printf("%lld.0",ans); } else { for (i=k;i<=n;i++) { t[S2(i)]++; if (S2(i)<=now) sum++; if (S2(i)<=now2) sum2++; while (sum<k/2) now++,sum+=t[now]; while (sum-t[now]>=k/2) sum-=t[now],now--; while (sum2<k/2+1) now2++,sum2+=t[now2]; while (sum2-t[now2]>=k/2+1) sum2-=t[now2],now2--; ans+=now+now2; t[S2(i-k+1)]--; if (S2(i-k+1)<=now) sum--; if (S2(i-k+1)<=now2) sum2--; } printf("%.1lf",1.0*ans/2); } return0; }
#include<bits/stdc++.h> #define maxn 100005 #define ll long long #define put() putchar('\n') usingnamespace std; inlinevoidread(int &x){ int f=1;x=0;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();} x*=f; } int n,k,a[maxn]; namespace BL{ priority_queue<int>q; inlinevoidsolve(void){ int i,m,x,ans1=0,ans2=0; while (!q.empty()) q.pop(); read(m); for (i=1;i<=m;i++) q.push(a[i]); for (i=1;i<=n;i++) { if (i&1) ans1+=q.top(),q.pop(); else ans2+=q.top(),q.pop(); if (i<=n-m) q.push(a[i+m]); } printf("%d\n",ans1-ans2); } inlinevoidmain(void){ int i; while (k--) solve(); } }//暴力 namespace STD{ int t[maxn]; inlinevoidmain(void){ int i,now,m; while (k--) { now=0;ll ans=0; read(m); for (i=1;i<=m;i++) t[a[i]]++,now=max(now,a[i]); ans+=now;t[now]--; for (i=2;i<=n;i++) { if (i<=n-m+1) { if (a[i+m-1]>=now) {ans+=(i%2==0?-1:1)*a[i+m-1];continue;} t[a[i+m-1]]++; } while (t[now]==0) now--; ans+=(i%2==0?-1:1)*now;t[now]--; } printf("%lld\n",ans); } } } signedmain(void){ int i; read(n);read(k); for (i=1;i<=n;i++) read(a[i]); STD::main(); return0; }