#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> lstairs, rstairs, pref;
ll n;
void upd(vector<ll> &a){
pref.assign(n+1, 0);
lstairs.assign(n+1, 0);
rstairs.assign(n+1, 0);
for (ll i=1; i<n+1; i++){
pref[i] = pref[i-1] + a[i];
lstairs[i] = lstairs[i-1] + pref[i];
}
rstairs[n] = a[n];
for (ll i=n-1; i>0; i--){
rstairs[i] = rstairs[i+1] + (pref[n] - pref[i-1]);
}
return;
}
int main(){
ll k;
cin >> n >> k;
vector<ll> a(n+1);
vector<ll> orig;
for (ll i=1; i<n+1; i++){
cin >> a[i];
}
orig = a;
upd(a);
cerr << "\n";
ll q, type, val, l, r, m, sum, lastl, lastr, x;
vector<ll> ind(k);
set<ll> toupd;
cin >> q;
for (ll i=0; i<q; i++){
cin >> type;
if (type == 1){
cin >> ind[0];
toupd.insert(ind[0]);
val = a[ind[0]];
for (ll j=1; j<k; j++){
cin >> ind[j];
toupd.insert(ind[j]);
a[ind[j-1]] = a[ind[j]];
}
a[ind[k-1]] = val;
val = toupd.size();
if (val * val >= n * k){
upd(a);
orig = a;
toupd.clear();
}
cerr << "\n";
}
else{
cin >> l >> r >> m;
lastl = min(l+m-1, r-m+1);
lastr = max(l+m-1, r-m+1);
if (lastl == lastr){
lastr++;
}
sum = rstairs[l] - rstairs[lastl+1] - (lastl - l + 1) * (pref[n] - pref[lastl])
+ lstairs[r] - lstairs[lastr-1] - (r - lastr + 1) * pref[lastr - 1]
+ (lastl - l + 1) * (pref[lastr-1] - pref[lastl]);
for (auto i : toupd){
if (x > lastl && x < lastr){
x = lastl - l + 1;
}
else{
x = min(i - l + 1, r - i + 1);
}
if (x > 0){
sum += (a[i] - orig[i]) * x;
}
}
cout << sum << "\n";
}
}
return 0;
}
Compilation message
Main.cpp: In function 'int main()':
Main.cpp:68:28: warning: 'x' may be used uninitialized in this function [-Wmaybe-uninitialized]
68 | if (x > lastl && x < lastr){
| ~~^~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
3 ms |
308 KB |
Output is correct |
3 |
Correct |
6 ms |
340 KB |
Output is correct |
4 |
Correct |
8 ms |
468 KB |
Output is correct |
5 |
Correct |
12 ms |
596 KB |
Output is correct |
6 |
Correct |
14 ms |
568 KB |
Output is correct |
7 |
Correct |
17 ms |
992 KB |
Output is correct |
8 |
Correct |
25 ms |
696 KB |
Output is correct |
9 |
Correct |
28 ms |
948 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
60 ms |
1788 KB |
Output is correct |
2 |
Correct |
111 ms |
2516 KB |
Output is correct |
3 |
Correct |
136 ms |
3380 KB |
Output is correct |
4 |
Correct |
252 ms |
5880 KB |
Output is correct |
5 |
Correct |
385 ms |
8196 KB |
Output is correct |
6 |
Correct |
429 ms |
7892 KB |
Output is correct |
7 |
Correct |
406 ms |
7916 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
418 ms |
4704 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |