Submission #633762

#TimeUsernameProblemLanguageResultExecution timeMemory
633762giorgikobAddk (eJOI21_addk)C++14
100 / 100
184 ms8020 KiB
#include<bits/stdc++.h> #define ll long long #define ff first #define ss second #define all(x) (x).begin(), (x).end() #define pb push_back #define eb emplace_back #define pii pair<int,int> #define count1(x) __builtin_popcount(x) #define endl '\n' using namespace std; const int N = 1e6+1, mod = 1e6, K = 31; int n, k, q; ll tree[N][2], A[N]; void upd(ll val, int pos, int k){ while(pos < N){ tree[pos][k] += val; pos += (pos & -pos); } } ll get(int pos, int k){ ll res = 0; while(pos > 0){ res += tree[pos][k]; pos -= (pos & -pos); } return res; } ll range_query(int l, int r, int k){ return get(r, k) - get(l-1, k); } inline void test_case(){ cin >> n >> k; for(int i = 1; i <= n; i++){ cin >> A[i]; upd(A[i], i, 0); upd((ll)A[i]*i, i, 1); } cin >> q; while(q--){ int type; cin >> type; if(type == 1){ int ind[k]; for(int i = 0; i < k; i++){ cin >> ind[i]; } int first = A[ind[0]]; for(int i = 0; i < k; i++){ int a = ind[i], b = ind[(i+1)%k]; ll vala = A[a]; ll valb = A[b]; if(i < k-1) { A[a] = A[b]; } else { valb = first; A[a] = first; } upd(valb - vala, a, 0); upd((valb - vala)*a, a, 1); } } else { int l, r, m; cin >> l >> r >> m; int mid = (l+r)/2; int l1 = 0; int r1 = 0; if((r-l+1) < m*2-1){ m = (r-l+1) - m + 1; } l1 = l+m-1; r1 = r-m+1; ll res1 = range_query(l, l1-1, 1) - (l-1)*range_query(l, l1-1, 0); //cout << res1 << endl; ll res2 = range_query(l1, r1, 0) * m; ll res3 = range_query(r1+1, r, 1) - (r1)*range_query(r1+1, r, 0); res3 = (r-r1+1)*range_query(r1+1, r, 0) - res3; //cout << res3 << endl; cout << res1 + res2 + res3 << endl; /*ll answer = 0; for(int i = l; i <= r-m+1; i++){ for(int j = i; j <= i+m-1; j++){ answer += A[j]; } } cout << answer << endl; assert(answer == res1 + res2 + res3);*/ } } } int main(){ ios::sync_with_stdio(0); //cin.tie(0); cout.tie(0); int T = 1; //cin >> T; while(T--){ test_case(); } }

Compilation message (stderr)

Main.cpp: In function 'void test_case()':
Main.cpp:74:17: warning: unused variable 'mid' [-Wunused-variable]
   74 |             int mid = (l+r)/2;
      |                 ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...