白皮书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 (大规模阵列)的更多相关文章

  1. UVA 12003 Array Transformer

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

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

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

  3. UVa 12003 Array Transformer (分块)

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

  4. Array Transformer UVA - 12003

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

  5. 毫米波大规模阵列中的AOA估计

    1.AOA估计在毫米波大规模MIMO中的重要性 在毫米波大规模MIMO的CSI估计中,AoA估计具有重要地位,主要原因归纳如下: 毫米波大规模MIMO 的信道具有空域稀疏性,可以简单通过AoA 和路径 ...

  6. UVA - 348Optimal Array Multiplication Sequence(递推)

    id=19208">题目:Optimal Array Multiplication Sequence 题目大意:给出N个矩阵相乘.求这些矩阵相乘乘法次数最少的顺序. 解题思路:矩阵相乘 ...

  7. uva 12003 分块

    大白上的原题,我就练练手... #include <bits/stdc++.h> using namespace std; typedef long long ll; ; ; ll blo ...

  8. UVa 11922 - Permutation Transformer 伸展树

    第一棵伸展树,各种调试模板……TVT 对于 1 n 这种查询我处理的不太好,之前序列前后没有添加冗余节点,一直Runtime Error. 后来加上冗余节点之后又出了别的状况,因为多了 0 和 n+1 ...

  9. uva 11922 - Permutation Transformer

    splay的题: 学习白书上和网上的代码敲的: #include <cstdio> #include <cstring> #include <cstdlib> #i ...

随机推荐

  1. ZOJ 1203 Swordfish 旗鱼 最小生成树,Kruskal算法

    主题链接:problemId=203" target="_blank">ZOJ 1203 Swordfish 旗鱼 Swordfish Time Limit: 2 ...

  2. 如何更改IE查看源代码菜单使用的HTML编辑器

    一:打开注册表。 二:打开"HKEY_CURRENT_USER/SOFTWARE/MICROSOFT/INTERNET EXPLORER"或"HKEY_LOCAL_MAC ...

  3. 打印出所有&quot;水仙花数

    时间限制: 1 Sec  内存限制: 128 MB 提交: 695  解决: 352 [提交][状态][讨论版] 题目描述 打印出所有"水仙花数",所谓"水仙花数&quo ...

  4. Oracle 重建索引脚本

    该指数是一个有力的武器,以提高数据库的查询性能. 没有索引,喜欢同样的标签库没有书籍,找书,他们想预订比登天还难.中,尤其是在批量的DML的情形下会产生对应的碎片.以及B树高度会发生对应变化.因此能够 ...

  5. 算法导论学习---红黑树具体解释之插入(C语言实现)

    前面我们学习二叉搜索树的时候发如今一些情况下其高度不是非常均匀,甚至有时候会退化成一条长链,所以我们引用一些"平衡"的二叉搜索树.红黑树就是一种"平衡"的二叉搜 ...

  6. 在java代码中获取JVM参数(转)

    近日关注性能调优,关注JMX,发现java.lang.management.*之强大.同时查阅了资料,整合一版关于JVM参数获取的note,仅供参考: MemoryMXBean memorymbean ...

  7. fragment 中利用spinner实现省市联动

    (1)布局文件就不在说明了,主要说代码的实现,先把代码贴上! package com.example.cl; import android.annotation.SuppressLint; impor ...

  8. 中文乱码?不,是 HTML 实体编码!(转)

    在 如何用 Nodejs 分析一个简单页面 一文中,我们爬取了博客园首页的 20 篇文章标题,输出部分拼接了一个字符串: var $ = cheerio.load(sres.text); var an ...

  9. Java单链逆转

    本文介绍两种方法单向链表反转.记录,如下面: 1. package com.leetcode; public class ListReverse { public static void main(S ...

  10. Big ball of Mud

    Big ball of Mud 第一种死法:Big ball of Mud 架构里最常用的反面案例是 big ball of mud.很大程度上可以说打格子,把复杂的系统拆解成小格子是架构师最重要的工 ...