uva 12003 分块
大白上的原题,我就练练手。。。 #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 分块的更多相关文章
- UVa 12003 Array Transformer (分块)
题意:给定一个序列,然后有 m 个修改,问你最后的序列是什么,修改是这样的 l r v p 先算出从 l 到 r 这个区间内的 小于 v 的个数k,然后把第 p 个的值改成 k * u / (r - ...
- UVA 12003 Array Transformer
Array Transformer Time Limit: 5000ms Memory Limit: 131072KB This problem will be judged on UVA. Orig ...
- uva 12003 Array Transformer (线段树套平衡树)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- uva 12003 Array Transformer (大规模阵列)
白皮书393页面. 乱搞了原始数组中.其实用另一种阵列块记录. 你不能改变原始数组. 请注意,与原来的阵列和阵列块的良好关系,稍微细心处理边境.这是不难. #include <cstdio> ...
- Array Transformer UVA - 12003
题目:传送门 题意: 给你n个数,要进行m次操作 对于每次操作(l,r,v,p)代表:在区间[l,r]中有x(这个x是需要你自己找出来的)个数小于v,你需要把序列的第p个位置的值改成u∗k/(r−l ...
- UVA - 11754 Code Feat (分块+中国剩余定理)
对于一个正整数N,给出C组限制条件,每组限制条件为N%X[i]∈{Y1,Y2,Y3,...,Yk[i]},求满足条件的前S小的N. 这道题很容易想到用中国剩余定理,然后用求第k小集合的方法输出答案.但 ...
- UVa 1640 (计数) The Counting Problem
题意: 统计[a, b]或[b, a]中0~9这些数字各出现多少次. 分析: 这道题可以和UVa 11361比较来看. 同样是利用这样一个“模板”,进行区间的分块,加速运算. 因为这里没有前导0,所以 ...
- 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); } ...
- PHP搭建大文件切割分块上传功能
背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...
随机推荐
- poj 3735 Training little cats 矩阵快速幂+稀疏矩阵乘法优化
题目链接 题意:有n个猫,开始的时候每个猫都没有坚果,进行k次操作,g x表示给第x个猫一个坚果,e x表示第x个猫吃掉所有坚果,s x y表示第x个猫和第y个猫交换所有坚果,将k次操作重复进行m轮, ...
- FTL标签
<#if blockObject ??> <#else> </if>判断对象是否存在 <#if componentid ?? &&compon ...
- mybatis 学习!
参考链接 http://www.mybatis.org/spring/zh/mappers.html http://www.cnblogs.com/fangjian0423/p/spring-myba ...
- 二、JavaScript语言--JS动画--JS动画效果
运动框架实现思路: 1.速度(改变值:left , right , width , height , opacity) 2.缓冲运动 3.多物体运动 4.任意值改变 5.链式运动 6.同时运动 js用 ...
- 并发用户数与 TPS 之间的关系
1. 背景 在做性能测试的时候,很多人都用并发用户数来衡量系统的性能,觉得系统能支撑的并发用户数越多,系统的性能就越好:对TPS不是非常理解,也根本不知道它们之间的关系,因此非常有必要进行解释. 2 ...
- MVC – 7.Razor 语法
7.1 Razor视图引擎语法 Razor通过理解标记的结构来实现代码和标记之间的顺畅切换. @核心转换字符,用来 标记-代码 的转换字符串. 语境A: @{ string rootName=&quo ...
- 与你相遇好幸运,Waterline初遇
Github : https://github.com/balderdashy/waterline 文档 : https://github.com/balderdashy/waterline-docs ...
- Linux性能分析工具的安装和使用
转自:http://blog.chinaunix.net/uid-26488891-id-3118279.html Normal 0 7.8 磅 0 2 false false false EN-US ...
- Android浏览本地 API文档 + 解决页面加载慢的问题
火狐浏览器安装离线浏览插件: 用浏览器打开index.html文件,你会发现加载的很慢,原因你懂的,为此,我们可以通过离线的方式 查看本地API文档,用火狐浏览器 + Work Offline插 ...
- Linux Shell 高级编程技巧2----shell工具
2.shell工具 2.1.日志文件 简介 创建日志文件是很重要的,记录了重要的信息.一旦出现错误,这些信息对于我们排错是非常有用的:监控的信息也可以记录到日 ...