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 ...
随机推荐
- 21个js 技巧收藏
1 Javascript数组转换为CSV格式 首先考虑如下的应用场景,有一个Javscript的字符型(或者数值型)数组,现在需要转换为以逗号分割的CSV格式文件.则我们可以使用如下的小技巧,代码如 ...
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
原文:乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 模板方法模式(Template Method ...
- Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)
问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...
- hdu 2454 Degree Sequence of Graph G (推断简单图)
///已知各点的度,推断是否为一个简单图 #include<stdio.h> #include<algorithm> #include<string.h> usin ...
- 【Android进阶】使用第三方平台ShareSDK实现新浪微博的一键分享功能
在公司最近的一个项目中,需要实现一键分享功能,在这里我使用的是第三方平台ShareSDK,将使用经验与大家分享 先看效果图 主界面 分享界面 由于第一次使用,所以需要先进行新浪授权,授权界面 分享结果 ...
- Bug记录:微博的Java SDK返回经纬度错误
现象:美国的坐标点可能会定位到西藏地区-后发现原来负经度经解析后,均变成正的! 源码: private void getGeoInfo(String geo) { StringBuffer value ...
- 玩转Web之servlet(一)---怎样创建一个servlet
Servlet概念:servlet就是用java编写的服务器端的小程序,用来完成下B/S架构(即浏览器和服务器架构)下客户端请求的响应处理. servlet通常在容器中运行Tomcat是常见的serv ...
- 写hive sql和shell脚本时遇到几个蛋疼的问题!
错误一: Hive的where后不能用字段的别名, 错误二: hive的groupby中不能用自己定义函数,否则报错(用嵌套select取代) 错误三: 运行:$ ./hive_game_operat ...
- [Unity3d]定义自己的鼠标
[Unity3d]自己定义鼠标 我们在用unity3d开发自己的游戏的时候.自己定义游戏中的鼠标也是常常要用到的.那我就得学学.事实上原理非常easy,先将鼠标给隐藏,然后在鼠标的位置上画出一个自己定 ...
- mumu血压计母亲节“拼团”盛大开幕,百度和厂家创造一个双赢的局面
在BAT的互联网时代.似乎不论什么新兴产品和服务都不能脱离BAT的支持,作为中国互联网体量最庞大的三家企业.BAT代表的是资源优势.用户优势.品牌优势.因此,一旦脱离BAT的支持,想迅速做大无 ...