Submission #1104923

# Submission time Handle Problem Language Result Execution time Memory
1104923 2024-10-24T17:54:50 Z Irate Meteors (POI11_met) C++17
74 / 100
1217 ms 38420 KB
#include<bits/stdc++.h>
using namespace std;
const int LOG = 20;
struct Query{
    int l, r, a;
};
struct T{
    int l, r, ans = -1;
};
struct BIT{
    vector<long long>fen;
    int sz;
    BIT(int n){
        sz = n;
        fen.resize(n + 1);
    }
    void Update(int pos, int val){
        while(pos <= sz){
            fen[pos] += val;
            pos += (pos & -pos);
        }
    }
    long long Sum(int pos){
        long long sum = 0;
        while(pos > 0){
            sum += fen[pos];
            pos -= (pos & -pos);
        }
        return sum;
    }
};
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, m;
    cin >> m >> n;
    vector<int>v(n + 1), p(m + 1);
    vector<vector<int>>pos(m + 1);
    vector<T>intervals(m + 1);
    for(int i = 1;i <= n;++i){
        cin >> v[i];
        pos[v[i]].push_back(i);
    }
    for(int i = 1;i <= m;++i){
        cin >> p[i];
    }
    int q;
    cin >> q;
    vector<vector<int>>timeline(q);
    vector<Query>queries(q);
    for(int i = 1;i <= m;++i){
        timeline[(q - 1) / 2].push_back(i);
        intervals[i] = {0, q - 1};
    }
    for(int i = 0;i < q;++i){
        int l, r, a;
        cin >> l >> r >> a;
        queries[i] = {l, r, a};
    }
    for(int i = 0;i < LOG;++i){
        BIT tree(n + 1);
        for(int j = 0;j < q;++j){
            int l = queries[j].l, r = queries[j].r, a = queries[j].a;
            if(l <= r){
                tree.Update(l, a);
                tree.Update(r + 1, -a);
            }
            else{
                tree.Update(l, a);
                tree.Update(n + 1, -a);
                tree.Update(1, a);
                tree.Update(r + 1, -a);
            }
            while(!timeline[j].empty()){
                int base = timeline[j].back();
                timeline[j].pop_back();
                l = intervals[base].l, r = intervals[base].r;
                int ans = intervals[base].ans;
                long long tot = 0;
                for(int &p : pos[base]){
                    tot += tree.Sum(p);
                }
                if(tot >= p[base]){
                    intervals[base] = {l, (l + r) / 2 - 1, (l + r) / 2};
                }
                else{
                    intervals[base] = {(l + r) / 2 + 1, r, ans};
                }
            }
        }
        for(int j = 1;j <= m;++j){
            timeline[(intervals[j].l + intervals[j].r) / 2].push_back(j);
        }
    }
    for(int i = 1;i <= m;++i){
        int ans = intervals[i].ans;
        if(ans < 0){
            cout << "NIE\n";
        }
        else{
            cout << ans + 1 << '\n';
        }
    }
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 336 KB Output is correct
2 Correct 2 ms 336 KB Output is correct
3 Correct 2 ms 336 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 708 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 2 ms 592 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 57 ms 4544 KB Output is correct
2 Correct 124 ms 7372 KB Output is correct
3 Correct 86 ms 6592 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 89 ms 5824 KB Output is correct
2 Correct 85 ms 5824 KB Output is correct
3 Correct 119 ms 7616 KB Output is correct
4 Correct 27 ms 3804 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 66 ms 4800 KB Output is correct
2 Correct 85 ms 7868 KB Output is correct
3 Correct 37 ms 2844 KB Output is correct
4 Correct 88 ms 7064 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 86 ms 4140 KB Output is correct
2 Correct 110 ms 6092 KB Output is correct
3 Correct 61 ms 4416 KB Output is correct
4 Correct 102 ms 8636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1217 ms 38420 KB Output is correct
2 Incorrect 642 ms 23636 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1136 ms 36880 KB Output is correct
2 Incorrect 644 ms 21968 KB Output isn't correct
3 Halted 0 ms 0 KB -