zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Web Browser使用技巧
    Excel 函数
    删除文件夹, 解决源文件名长度大于文件系统支持的长度问题
    Send Mail using C# code
    动态规划——最长回文子串
    字符串处理总结
    打印日期
    A+B
    对称矩阵
    最小年龄的3个职工
  • 原文地址:https://www.cnblogs.com/yijiull/p/8329389.html
Copyright © 2011-2022 走看看