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 ...
随机推荐
- hdu 1171 Big Event in HDU(母函数)
链接:hdu 1171 题意:这题能够理解为n种物品,每种物品的价值和数量已知,现要将总物品分为A,B两部分, 使得A,B的价值尽可能相等,且A>=B,求A,B的价值分别为多少 分析:这题能够用 ...
- 写一个 docker 打击一系列手册
感谢您的关注,分享也再次给自己一个学习的.机会组织和总结.对未来一段时间内准备一个关于 docker 一系列的实际应用,其中的一些内容此前曾宣布.准备再次修改和整理. 以下是主要的文件夹中的一个: 创 ...
- Multicast on Openstack
I test multicast on openstack. I use external Router in this test. Openstack Environment: Havana (ML ...
- java这些东西发展(1)-------大约ORA00604和ORA12705
******************************有关myEclipse和oracle在连接发生的一个问题********************************* 用户界面显示的评 ...
- 8、Cocos2dx 3.0三,找一个小游戏开发3.0存储器管理的版本号
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27693365 复杂的内存管理 移动设备上的硬件资源十 ...
- zepto.js 源码注释备份
/* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ ;(funct ...
- android Intent.createChooser 应用选择
在微博案例: 1.public void onClickShare(View view) { 2. 3. Intent intent=new Intent(Intent.ACTION_SEND); 4 ...
- MVC5 Entity Framework学习之实现继承
之前你已经学习了怎样处理并发异常,在本节中你将学习怎样实现继承. 在面向对象的编程中,你能够使用继承来重用代码.接下来你将改动Instructor和Student类,让它们派生自Person基类,该基 ...
- weighted Kernel k-means 加权核k均值算法理解及其实现(一)
那就从k-means开始吧 对于机器学习的新手小白来说,k-means算法应该都会接触到吧.传统的k-means算法是一个硬聚类(因为要指定k这个参数啦)算法.这里利用百度的解释 它是数据点到原型的某 ...
- JNDI-j2ee
Database Connection Pool (DBCP) Configurations The default database connection pool implementation i ...