• Array Transformer UVA


    Array Transformer

    UVA - 12003

     白书p393

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 300010;
     4 const int size = 4096;
     5 
     6 int n, m, u, a[maxn], bk[maxn / size + 1][size];
     7 
     8 void init(){
     9     scanf("%d %d %d", &n, &m, &u);
    10     int b = 0, j = 0;
    11     for(int i = 0; i  < n; i++){
    12         scanf("%d", &a[i]);
    13         bk[b][j] = a[i];
    14         if(++j == size) {
    15             b++; j = 0;
    16         }
    17     }
    18     for(int i = 0; i < b; i++) sort(bk[i], bk[i] + size);
    19     if(j) sort(bk[b], bk[b] + j);
    20 }
    21 
    22 int query(int l, int r, int v){
    23     int lb = l / size, rb = r / size;
    24     int k = 0;
    25     if(lb == rb) {
    26         for(int i = l; i <= r; i++) if(a[i] < v) k++;
    27     }else{
    28         for(int i = l; i < (lb + 1) * size; i++) if(a[i] < v) k++;
    29         for(int i = rb * size; i <= r; i++) if(a[i] < v) k++;
    30         for(int b = lb + 1; b < rb; b++){
    31             k += lower_bound(bk[b], bk[b] + size, v) - bk[b];
    32         }
    33     }
    34     return k;
    35 }
    36 
    37 void change(int p, int x){
    38     if(a[p] == x) return;
    39     int old = a[p], pos = 0, *B = &bk[p / size][0];
    40     a[p] = x;
    41     while(B[pos] < old) pos++;
    42     B[pos] = x;
    43     if(x > old) while(pos < size - 1 && B[pos] > B[pos + 1]) swap(B[pos], B[pos + 1]), pos++;
    44     else while(pos > 0 && B[pos] < B[pos - 1]) swap(B[pos], B[pos - 1]), pos--;
    45 }
    46 
    47 int main(){
    48     init();
    49     while(m--){
    50         int l, r, v, p;
    51         scanf("%d %d %d %d", &l, &r, &v, &p);
    52         l--; r--; p--;
    53         int k = query(l, r, v);
    54         change(p, (long long)u * k / (r - l + 1));
    55     }
    56     for(int i = 0; i < n; i++) printf("%d
    ", a[i]);
    57     return 0;
    58 }
    View Code
  • 相关阅读:
    X
    W
    J
    A
    Q
    P
    B
    排列和组合的求解
    深度学习之序列处理
    32位和64位数据类型大小对比
  • 原文地址:https://www.cnblogs.com/yijiull/p/8329389.html
Copyright © 2020-2023  润新知