QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#248873#6656. 先人类的人类选别zzpcdRE 0ms0kbC++172.7kb2023-11-11 22:23:242023-11-11 22:23:25

Judging History

你现在查看的是最新测评结果

  • [2023-11-11 22:23:25]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:0kb
  • [2023-11-11 22:23:24]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int MN = 5e5 + 5;
using ll = long long;
int n, m, a[MN];
int num[MN], N;
struct que{
    int x, l, r;
}q[MN];
namespace zkw{
    struct Node{
        ll v;
        int num;
        int ls, rs;
    }T[MN * 20];
    int N, rt[MN];
    void add(int& x, int y, int l, int r, int pos) {
        if(!x) x = ++N;
        
        if(l == r) {
            T[x] = T[y];
            T[x].num++;
            T[x].v += num[pos];
            return;
        }
        int mid = l + r >> 1;
        if(pos <= mid)
            add(T[x].ls, T[y].ls, l, mid, pos),
            T[x].rs = T[y].rs;
        else
            add(T[x].rs, T[y].rs, mid + 1, r, pos),
            T[x].ls = T[y].ls;
        T[x].num = T[T[x].ls].num + T[T[x].rs].num;
        T[x].v = T[T[x].ls].v + T[T[x].rs].v;
    }
    void add2(int& x, int l, int r, int pos) {
        if(!x) x = ++N;
        
        if(l == r) {
            T[x].num++;
            T[x].v += num[pos];
            return;
        }
        int mid = l + r >> 1;
        if(pos <= mid)
            add2(T[x].ls, l, mid, pos);
        else
            add2(T[x].rs, mid + 1, r, pos);
        T[x].num = T[T[x].ls].num + T[T[x].rs].num;
        T[x].v = T[T[x].ls].v + T[T[x].rs].v;
    }
    ll query(int x, int y, int l, int r, int k) {
        if(l == r) {
            return (ll)k * num[l];
        }
        int mid = l + r >> 1;
        if(k <= T[T[x].rs].num + T[T[y].rs].num)
            return query(T[x].rs, T[y].rs, mid + 1, r, k);
        return T[T[x].rs].v + T[T[y].rs].v + query(T[x].ls, T[y].ls, l, mid, k - (T[T[x].rs].num + T[T[y].rs].num));
    }
}
using zkw::rt;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cin >> n >> m;
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
        num[i] = a[i];
    }
    N = n + m;
    for(int i = 1; i <= m; i++) {
        cin >> q[i].x >> q[i].l >> q[i].r;
        num[i + n] = q[i].x;
    }
    sort(num + 1, num + 1 + N);
    N = unique(num + 1, num + 1 + N) - num - 1;
    for(int i = 1; i <= n; i++)
        zkw::add(rt[i], rt[i - 1], 1, N, lower_bound(num + 1, num + 1 + N, a[i]) - num);
    for(int i = 1; i <= m; i++) {
        auto [x, l, r] = q[i];
        zkw::add2(rt[n + 1], 1, N, lower_bound(num + 1, num + 1 + N, x) - num);
        // cerr << zkw::query(rt[1], rt[n + 1], 1, N, 1) << "\n";
        // cerr << zkw::T[rt[1]].v << "\n";
        cout << zkw::query(rt[r], rt[n + 1], 1, N, r) - zkw::query(rt[l - 1], rt[n + 1], 1, N, l - 1) << "\n";
    }
}
/*
6 8
1 6 1 3 5 4
2 3 6
3 3 4
2 4 4
6 3 5
4 1 1
4 2 3
2 4 6
1 3 3

6 1
1 6 1 3 5 4
2 1 6
*/

詳細信息

Test #1:

score: 0
Runtime Error

input:

499998 499999
225823 463012 151183 217174 254116 87516 430524 123887 1361 369166 194997 386501 152639 163995 82309 151761 31404 226965 394185 101304 79621 99315 150936 156155 31208 399526 358496 220267 192773 347327 92807 441843 423834 173327 131913 369822 399380 107225 354942 357415 472293 22050 24...

output:

38670782768
56411250894
160558925669
31017692594
31047656751
12261574062
35178454865
171298651740
17299092617
9886436131
2270437628
78316193835
82534522085
43496577175
181201153334
1167516537
98745366750
49320840081
8611919810
35069702617
10382223975
19193470052
38981882732
96397121827
11256749667
5...

result: