uva 12003 Array Transformer (大规模阵列)
白皮书393页面。
乱搞了原始数组中。其实用另一种阵列块记录。
你不能改变原始数组。
请注意,与原来的阵列和阵列块的良好关系,稍微细心处理边境。这是不难。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define maxn 300005
#define SIZE 600
using namespace std; int a[maxn];
int block[maxn];
int b[maxn];
void work(int p,int x)
{
int old=b[p];
b[p]=x;
int BLOCK=p/SIZE;
int pos=p;
for(int i=BLOCK*SIZE;i<BLOCK*SIZE+SIZE;i++)
{
if(a[i]==old)
{
pos=i;
a[i]=x;
break;
}
}
while(block[pos+1]==block[p] && a[pos+1]<a[pos])
{
swap(a[pos+1],a[pos]);
pos++;
}
while(pos-1>=0 && block[pos-1]==block[p] && a[pos-1]>a[pos])
{
swap(a[pos-1],a[pos]);
pos--;
}
} int main()
{
int n,m,u;
while(scanf("%d%d%d",&n,&m,&u)!=EOF)
{
memset(a,0x3f,sizeof a);
memset(block,0x3f,sizeof block); for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
block[i]=i/SIZE;
} for(int i=0;i<(n-1)/SIZE;i++)
{
sort(a+i*SIZE,a+(i+1)*SIZE);
} sort(a+((n-1)/SIZE*SIZE),a+n); while(m--)
{
int l,r,v,p;
scanf("%d%d%d%d",&l,&r,&v,&p);
l--,r--,p--;
int ans=0;
if(block[l]==block[r])
{
for(int i=l;i<=r;i++)
if(b[i]<v)ans++;
}
else
{
for(int i=l;block[i]==block[l];i++)
{
if(b[i]<v)ans++;
}
for(int i=r;block[i]==block[r];i--)
if(b[i]<v)ans++; for(int i=SIZE*(l/SIZE+1);i<r/SIZE*SIZE;i+=SIZE)
{
ans+=lower_bound(a+i,a+i+SIZE,v)-(a+i);
}
}
work(p,(long long)u*ans/(r-l+1));
}
for(int i=0;i<n;i++)
printf("%d\n",b[i]);
}
return 0;
} /*
10 3 5
10 9 8 7 6 5 4 3 2 1
2 5 9 4
2 9 6 5
4 10 5 6
*/
版权声明:本文博客原创文章,博客,未经同意,不得转载。
uva 12003 Array Transformer (大规模阵列)的更多相关文章
- 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 (分块)
题意:给定一个序列,然后有 m 个修改,问你最后的序列是什么,修改是这样的 l r v p 先算出从 l 到 r 这个区间内的 小于 v 的个数k,然后把第 p 个的值改成 k * u / (r - ...
- Array Transformer UVA - 12003
题目:传送门 题意: 给你n个数,要进行m次操作 对于每次操作(l,r,v,p)代表:在区间[l,r]中有x(这个x是需要你自己找出来的)个数小于v,你需要把序列的第p个位置的值改成u∗k/(r−l ...
- 毫米波大规模阵列中的AOA估计
1.AOA估计在毫米波大规模MIMO中的重要性 在毫米波大规模MIMO的CSI估计中,AoA估计具有重要地位,主要原因归纳如下: 毫米波大规模MIMO 的信道具有空域稀疏性,可以简单通过AoA 和路径 ...
- UVA - 348Optimal Array Multiplication Sequence(递推)
id=19208">题目:Optimal Array Multiplication Sequence 题目大意:给出N个矩阵相乘.求这些矩阵相乘乘法次数最少的顺序. 解题思路:矩阵相乘 ...
- uva 12003 分块
大白上的原题,我就练练手... #include <bits/stdc++.h> using namespace std; typedef long long ll; ; ; ll blo ...
- UVa 11922 - Permutation Transformer 伸展树
第一棵伸展树,各种调试模板……TVT 对于 1 n 这种查询我处理的不太好,之前序列前后没有添加冗余节点,一直Runtime Error. 后来加上冗余节点之后又出了别的状况,因为多了 0 和 n+1 ...
- uva 11922 - Permutation Transformer
splay的题: 学习白书上和网上的代码敲的: #include <cstdio> #include <cstring> #include <cstdlib> #i ...
随机推荐
- maven配置文件里改动默认jre
方法一:打开%maven_home%\conf\setting.xml,仅仅会在新建项目时自己主动使用1.6的导入项目不会 在<profiles>标签内加入�例如以下配置: <pro ...
- 不用库(框架),自己写ajax
平常会使用ajax来请求数据,加载一个库(框架),或许仅仅maybe就使用了它的ajax部分. 写个ajax,一来可以经历一下处理问题的过程,提升技术能力,二来工作中有时真的用不着这么大的一个库(框架 ...
- C#和C++下数据类型对应表
/C++中的DLL函数原型为//extern "C" __declspec(dllexport) bool 方法名一(const char* 变量名1, unsigned char ...
- Reactive ExtensionsLINQ和Rx简单介绍
LINQ和Rx简单介绍 相信大家都用过Language Integrated Query (LINQ),他是一种强大的工具能够从集合中提取数据.Reactive Extensions(Rx)是对LIN ...
- 【转】Android 避免APP启动闪黑屏(Theme和Style)
前几天Boss就反应说,机器每次启动程序都会闪一下黑屏,这个客户不接受.没办法,只能想想怎么解决,最后找到了下面的方法.闪黑屏的原因主要是我们启动Activity的时候,需要跑完onCreate和on ...
- JAVA基金会 (三)反射 反思的深度分析
上一页已经推出反映的一些基本概念,这主要是通过一个例子反映谈的过程,以及样品的实际应用. 这个样例是这种设计思路:从一个属性文件里读取一段字符串,然后,依据该字符串生成相应的类实例对象:这之后另一个增 ...
- 【甘道夫】HBase连接池 -- HTablePool是Deprecated之后
说明: 近期两天在调研HBase的连接池,有了一些收获,特此记录下来. 本文先将官方文档(http://hbase.apache.org/book.html)9.3.1.1节翻译,方便大家阅读,然后查 ...
- andriod 在windows配置环境
andriod开发环境配置 个人信息:就读于燕大本科软件project专业 眼下大四; 本人博客:google搜索"cqs_2012"就可以; 个人爱好:酷爱数据结构和算法,希望将 ...
- Android使用代码消除App数据并重新启动设备
/** * 使用代码消除App数据 * 我们不寻常的清除App数据,中找到相应的App * 然后选择其清除数据.以下给出代码实现. * * 注意事项: * 1 设备须要root * 2 该演示样例中删 ...
- [android更新类的内容开发APP]四、项目布局的基本功能(继续)
昨天,只拿到电脑,别说,眼泪 http://joveth.github.io/funny/ 1.选项卡的滑动效果 要知道.用这个选项卡就是想让它滑动起来,不然的话.我才不喜欢用它呢. 在让他滑动之前, ...