제출 #1285366

#제출 시각아이디문제언어결과실행 시간메모리
1285366silence25Addk (eJOI21_addk)C++20
100 / 100
314 ms8852 KiB
#include "bits/stdc++.h" #define ll long long #define pb push_back #define pp pop_back #define ff first #define ss second #define all(v) v.begin(),v.end() #define rall(v) v.rbegin(),v.rend() #define sz(s) (ll)s.size() using namespace std; const ll INF = 1e9+7; const ll maxn = 1e5+5; ll n; ll v[maxn]; ll s1[4*maxn]; ll s2[4*maxn]; ll s3[4*maxn]; void build(ll nd,ll s,ll e){ if(s == e){ s1[nd] = v[s]; s2[nd] = v[s] * s; s3[nd] = v[s] * (n-s+1); return; } ll mid = s + (e-s)/2; build(2*nd,s,mid); build(2*nd+1,mid+1,e); s1[nd] = s1[2*nd] + s1[2*nd+1]; s2[nd] = s2[2*nd] + s2[2*nd+1]; s3[nd] = s3[2*nd] + s3[2*nd+1]; } void update(ll nd,ll s,ll e,ll pos){ if(s > pos || e < pos) return; if(s == e){ s1[nd] = v[s]; s2[nd] = v[s] * s; s3[nd] = v[s] * (n-s+1); return; } ll mid = s + (e-s)/2; update(2*nd,s,mid,pos); update(2*nd+1,mid+1,e,pos); s1[nd] = s1[2*nd] + s1[2*nd+1]; s2[nd] = s2[2*nd] + s2[2*nd+1]; s3[nd] = s3[2*nd] + s3[2*nd+1]; } ll get(ll nd,ll s,ll e,ll l,ll r,ll tp){ if(s > r || e < l) return 0; if(l <= s && e <= r){ if(tp == 1) return s1[nd]; else if(tp == 2) return s2[nd]; else return s3[nd]; } ll mid = s + (e-s)/2; return get(2*nd,s,mid,l,r,tp) + get(2*nd+1,mid+1,e,l,r,tp); } void solve(){ ll k; cin>>n>>k; for(ll i = 1;i<=n;++i) cin>>v[i]; build(1,1,n); ll q; cin>>q; while(q--){ ll tp; cin>>tp; if(tp == 1){ vector<ll>a(k); for(auto &it:a) cin>>it; ll old = v[a[0]]; for(ll i = 0;i<k-1;++i) v[a[i]] = v[a[i+1]]; v[a.back()] = old; for(auto it:a) update(1,1,n,it); }else{ ll l,r,m; cin>>l>>r>>m; ll ans = 0; ll cnt = r-l-m+2; ll g = min(cnt,m); ll st = l + g - 1; ll ed = r - g + 1; if(st <= ed) ans += get(1,1,n,st,ed,1)*g; ll coef = 1 - l; if(st - 1 >= l) ans += get(1,1,n,l,st-1,2) + coef * get(1,1,n,l,st-1,1); coef = r - n; if(ed + 1 <= r) ans += get(1,1,n,ed+1,r,3) + coef * get(1,1,n,ed+1,r,1); cout<<ans<<endl; } } } int main(){ // freopen("file.in","r",stdin); ios::sync_with_stdio(false);cin.tie(nullptr); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...