제출 #1276346

#제출 시각아이디문제언어결과실행 시간메모리
1276346Bui_Quoc_CuongBubble Sort Machine (JOI25_bubble)C++20
49 / 100
711 ms79120 KiB
#include <bits/stdc++.h> using namespace std; #define FOR(i,a,b) for(int i=a;i<=(int)b;i++) #define FORD(i,a,b) for(int i=a;i>=(int)b;i--) #define ll long long #define fi first #define se second #define pb push_back #define all(a) a.begin(),a.end() #define BIT(mask,i) ((mask>>(i))&1) #define MASK(a) (1LL<((a))) #define uni(v) sort(all(v)); v.resize(unique(all(v)) - v.begin()) #define pii pair <int, int> #define vi vector <int> #define vl vector <ll> template <class A,class B> bool maximize(A &a, const B b) { if(a < b){ a = b; return 1;} return 0; } template <class A,class B> bool minimize(A &a, const B b) { if(a > b){ a = b; return 1;} return 0; } const int maxn = 5e5 + 5; int n, q, a[maxn]; int ans[maxn]; int decompress[maxn]; vector <array <int, 3>> ask[maxn]; struct Node { int cnt; ll sum; Node() { cnt = sum = 0; } friend Node operator + (Node a, Node b) { Node ans; ans.cnt = a.cnt + b.cnt; ans.sum = a.sum + b.sum; return ans; } } st[4 * maxn]; void update(int pos, int val) { int id = 1, l = 1, r = n; while(l < r) { int mid = (l + r) >> 1; if(pos <= mid) id = id << 1, r = mid; else id = id << 1 | 1, l = mid + 1; } st[id].cnt++; st[id].sum+= val; while(id > 1) { id >>= 1; st[id] = st[id << 1] + st[id << 1 | 1]; } } ll getSum(int gay) { int id = 1, l = 1, r = n; ll sum = 0; while(1) { if(l == r) { return sum + 1LL * gay * decompress[l]; } int mid = (l + r) >> 1; if(st[id << 1].cnt <= gay) { gay-= st[id << 1].cnt; sum+= st[id << 1].sum; l = mid + 1; id = id << 1 | 1; } else { r = mid; id = id << 1; } } return sum; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define kieuoanh "kieuoanh" if(fopen(kieuoanh".inp","r")) { freopen(kieuoanh".inp","r",stdin); freopen(kieuoanh".out","w",stdout); } cin >> n; FOR(i, 1, n) cin >> a[i]; vector <int> values; FOR(i, 1, n) values.push_back(a[i]); uni(values); FOR(i, 1, n) a[i] = upper_bound(all(values), a[i]) - values.begin(); FOR(i, 0, values.size() - 1) decompress[i + 1] = values[i]; int op = 0; cin >> q; vector <int> TQ(q + 2, 0); FOR(i, 1, q) { int sign; cin >> sign; TQ[i] = sign; if(sign == 1) { op++; } else { int L, R; cin >> L >> R; L--; ask[min(n, L + op)].push_back({i, L, - 1}); ask[min(n, R + op)].push_back({i, R, 1}); } } FOR(i, 0, n) { if(i > 0) update(a[i], decompress[a[i]]); for(auto it : ask[i]) { int idq = it[0], cnt = it[1], sign = it[2]; ll sum = getSum(cnt); ans[idq]+= 1LL * sign * sum; } } FOR(i, 1, q) if(TQ[i] == 2) cout << ans[i] << "\n"; return 0; }

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

bubble.cpp: In function 'int main()':
bubble.cpp:101:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  101 |         freopen(kieuoanh".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
bubble.cpp:102:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  102 |         freopen(kieuoanh".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...