大白上的原题,我就练练手。。。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e5 + ;
const int SIZE = ;
ll block[N / SIZE + ][SIZE + ];
ll A[N]; int query(int L, int R, int v)
{
int k = ;
int lb = L / SIZE, rb = R / SIZE;
if(lb == rb) { for(int i = L; i <= R; ++i) if(A[i] < v) k++; }
else {
for(int i = L; i < (lb + ) * SIZE; ++i) if(A[i] < v) k++;
for(int i = rb * SIZE; i <= R; ++i) if(A[i] < v) k++;
for(int i = lb + ; i < rb; ++i) {
k += lower_bound(block[i], block[i] + SIZE, v) - block[i];
}
}
return k;
}
void change(int k, int u, int p, int L, int R)
{
ll x = (ll)u * k / (R - L + );
if(A[p] == x) return; int la = p / SIZE;
ll* B = &block[la][];
int pos = ;
ll old = A[p];
while(B[pos] < old) pos++;
A[p] = x; B[pos] = x;
if(x > old) {
while(pos < SIZE - && B[pos] > B[pos + ]) { swap(B[pos + ], B[pos]); pos++; }
}
else {
while(pos > && B[pos] < B[pos - ]) { swap(B[pos - ], B[pos]); pos--; }
}
}
int main()
{
int n, m, u;
while(~scanf("%d%d%d", &n, &m, &u))
{
int j = , k = ;
for(int i = ; i < n; ++i)
{
scanf("%lld", &A[i]);
block[k][j++] = A[i];
if(j == SIZE) { k++; j = ; }
}
for(int i = ; i < k; ++i) sort(block[i], block[i] + SIZE);
if(j) sort(block[k], block[k] + j);
int L, R, v, p;
while(m --)
{
int ans = ;
scanf("%d%d%d%d", &L, &R, &v, &p);
L--; R--; p--;
ans = query(L, R, v);
change(ans, u, p, L, R);
}
for(int i = ; i < n; ++i) printf("%lld\n", A[i]);
}
return ;
}
  

uva 12003 分块的更多相关文章

  1. UVa 12003 Array Transformer (分块)

    题意:给定一个序列,然后有 m 个修改,问你最后的序列是什么,修改是这样的 l r v p 先算出从 l 到 r 这个区间内的 小于 v 的个数k,然后把第 p 个的值改成 k * u / (r - ...

  2. UVA 12003 Array Transformer

    Array Transformer Time Limit: 5000ms Memory Limit: 131072KB This problem will be judged on UVA. Orig ...

  3. uva 12003 Array Transformer (线段树套平衡树)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  4. uva 12003 Array Transformer (大规模阵列)

    白皮书393页面. 乱搞了原始数组中.其实用另一种阵列块记录. 你不能改变原始数组. 请注意,与原来的阵列和阵列块的良好关系,稍微细心处理边境.这是不难. #include <cstdio> ...

  5. Array Transformer UVA - 12003

    题目:传送门 题意: 给你n个数,要进行m次操作 对于每次操作(l,r,v,p)代表:在区间[l,r]中有x(这个x是需要你自己找出来的)个数小于v,你需要把序列的第p个位置的值改成u∗k/(r−l ...

  6. UVA - 11754 Code Feat (分块+中国剩余定理)

    对于一个正整数N,给出C组限制条件,每组限制条件为N%X[i]∈{Y1,Y2,Y3,...,Yk[i]},求满足条件的前S小的N. 这道题很容易想到用中国剩余定理,然后用求第k小集合的方法输出答案.但 ...

  7. UVa 1640 (计数) The Counting Problem

    题意: 统计[a, b]或[b, a]中0~9这些数字各出现多少次. 分析: 这道题可以和UVa 11361比较来看. 同样是利用这样一个“模板”,进行区间的分块,加速运算. 因为这里没有前导0,所以 ...

  8. UVa 11526 H(n)

    题意: long long H(int n){ long long res = 0; for( int i = 1; i <= n; i=i+1 ){ res = (res + n/i); } ...

  9. PHP搭建大文件切割分块上传功能

    背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...

随机推荐

  1. 【leetcode】3Sum (medium)

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  2. 如何在MyEclipse中通过hibernate使用jtds驱动连接数据库,并向数据库添加数据的方法

    最近学习了下如何在MyEclipse中通过hibernate使用jtds驱动连接数据库,并向数据库添加数据的方法,虽然MyEclipse中自带了连接数据库的方法,我也尝试了下其他方法,如有不当之处请指 ...

  3. SQL Server output经典使用

    output经典使用 分类: sql2012-02-16 18:17 409人阅读 评论(0) 收藏 举报 outputinserttabledeletegonull OUTPUT是SQL SERVE ...

  4. Caffe初试(一)win7_64bit+VS2013+Opencv2.4.10+CUDA6.5配置Caffe环境

    折腾了几天,终于在windows系统上成功配置了Caffe环境,期间遇到了很多问题,每个问题的解决也都花了不少时间,查过挺多资料,感觉挺有意义,这里写篇博客记录一下. 原来我使用的CUDA版本是7.5 ...

  5. android的JNI 、 NDK 学习!

    转载的! Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) ...

  6. Tomcat在Linux上的安装与配置

    以下使用的Linux版本为: Redhat Enterprise Linux 6.5 x86_64,Tomcat版本为tomcat-7.0.54. 1.下载JDK与Tomcat.    jdk下载地址 ...

  7. 动手动脑及java程序之用消息框进行数的运算

        动手动脑     自信成就人生 动手动脑1 ✿仔细阅读示例: EnumTest.java,运行它,分析运行结果? package demo; public class Test { publi ...

  8. mysql列类型

    mysql三大列类型 整型 tinyint(占据空间:1个字节 存储范围  有符号  -128-127   无符号  0-255) smallint   mediumint    int    big ...

  9. Asp.Net - 8.多线程

    8.1 概念 进程(Process):是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.进程之间是相对独立的,一个进程无法直接访问另一个进程的数据(除非利用分布式计算方式),一个 ...

  10. Tomcat7配置数据源

    http://www.cnblogs.com/ITtangtang/archive/2012/05/21/2511749.html