제출 #1268176

#제출 시각아이디문제언어결과실행 시간메모리
1268176rayan_bdAddk (eJOI21_addk)C++20
0 / 100
1 ms576 KiB
#include <bits/stdc++.h> using namespace std; #define int long long struct segment_tree{ vector<int> seg; int N; void init(int n){ N = n; seg.resize(n * 4, 0); } void upd(int node, int start, int end, int idx, int val){ if(start == end){ seg[node] = val; return; } int mid = start + (end - start) / 2; if(idx <= mid) upd(node * 2 + 1, start, mid, idx, val); else upd(node * 2 + 2, mid + 1, end, idx, val); seg[node] = seg[node * 2 + 1] + seg[node * 2 + 2]; } int query(int node, int start, int end, int l, int r){ if(start > r || end < l) return 0; if(start >= l && end <= r) return seg[node]; int mid = start + (end - start) / 2; return query(node * 2 + 1, start, mid, l, r) + query(node * 2 + 2, mid + 1, end, l, r); } void upd(int point, int val){ upd(0, 1, N, point, val); } int query(int l, int r){ if(l > r) return 0; return query(0, 1, N, l, r); } } tr1, tr2, tr3; signed main(){ freopen("input.in", "r", stdin); freopen("output.out", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); int n, k, q, t, l, r, m; cin >> n >> k; vector<int> a(n + 1, 0); for(int i = 1; i <= n; ++i){ cin >> a[i]; } tr1.init(n + 5), tr2.init(n + 5), tr3.init(n + 5); for(int i = 1; i <= n; ++i){ tr1.upd(i, a[i] * i); tr2.upd(i, a[i] * (n - i + 1)); tr3.upd(i, a[i]); } auto get = [&](int l, int r, int xx) -> int{ if(l > r) return -1; return tr3.query(l, r) * xx; }; cin >> q; while(q--){ cin >> t; if(t == 1){ vector<int> pos(k); for(auto &it : pos) cin >> it; int tmp = a[pos[0]]; for(int i = 0; i < (int) pos.size() - 1; ++i){ a[pos[i]] = a[pos[i + 1]]; tr1.upd(pos[i], a[pos[i + 1]] * pos[i]); tr2.upd(pos[i], a[pos[i + 1]] * (n - pos[i] + 1)); tr3.upd(pos[i], a[pos[i + 1]]); } a[pos.back()] = tmp; tr1.upd(pos.back(), tmp * pos.back()); tr2.upd(pos.back(), tmp * (n - pos.back() + 1)); tr3.upd(pos.back(), tmp); }else{ cin >> l >> r >> m; int ans = 0; if((r - l + 1) == m){ ans = tr3.query(l, r); }else{ int xyz = min((r - l + 1) - m, m); ans += tr1.query(l, l + xyz - 1) - tr3.query(l, l + xyz - 1) * (l - 1); ans += tr2.query(r - xyz + 1, r) - tr3.query(r - xyz + 1, r) * (n - r); ans += tr3.query(l + xyz, r - xyz) * (m - 1); } cout << ans << "\n"; } } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In function 'int main()':
Main.cpp:37:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |     freopen("input.in", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:38:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   38 |     freopen("output.out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...