제출 #1307119

#제출 시각아이디문제언어결과실행 시간메모리
1307119TaxiradioBubble Sort Machine (JOI25_bubble)C++20
100 / 100
891 ms74900 KiB
#include<bits/stdc++.h>

using namespace std;

#define int int64_t

int f[600000] , f2[600000];

void add(int p , int v){
    while(p < 600000){
        f[p]+=v;
        p +=(-p)&p;
    }
}

int get(int p){
    int ans = 0;
    while(p>0){
        ans += f[p];
        p -= (-p)&p;
    }
    return ans;
}

void add2(int p , int v){
    while(p < 600000){
        f2[p]+=v;
        p +=(-p)&p;
    }
}

int get2(int p){
    int ans = 0;
    while(p>0){
        ans += f2[p];
        p -= (-p)&p;
    }
    return ans;
}


int32_t main(){
    int n; cin >> n;
    vector<array<int , 2>> a , c(n);
    vector<int> p;p.push_back(0);
    for(int i = 0; i < n; i++){
        int x; cin >> x;
        a.push_back({x , i});
        p.push_back(p.back()+x);
    }
    sort(a.begin() , a.end());
    for(int i = 0; i < n; i++){
        c[a[i][1]] = {a[i][0] , i};
    }
    int q;cin >> q;
    int u = 0;
    vector<array<int , 4>> o;
    vector<int> ans;
    while(q--){
        int b; cin >> b;
        if(b==1){
            u++;
            continue;
        }
        int l , r; cin >> l >> r;
        o.push_back({min(l-1+u , n)-1  , min(l-1+u , n)-(l-1) , int(ans.size()) , 1});
        o.push_back({min(r+u , n)-1  , min(r+u , n)-(r) , int(ans.size()) , -1});
        int h = 0;
        h += p[r]-p[l-1];
        h -= p[min(l+u-1 , n)]-p[l-1];
        h += p[min(r+u , n)]-p[r];
        ans.push_back(h);
    }
    sort(o.begin() , o.end());
    int j = -1;
    for(int i = 0; i < o.size(); i++){
        while(j < o[i][0]){
            j++;
            add(n-c[j][1] , c[j][0]);
            add2(n-c[j][1] , 1);
        }
        int l = 0 , r = 600000;
        while(l+1 != r){
            int m = (l+r)/2;
            if(get2(m) > o[i][1])r=m; else l=m;
        }
        ans[o[i][2]] += o[i][3]*get(l);
    }
    for(int x : ans) cout << x << "\n";
}
#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...