Array Transformer UVA - 12003
题目:传送门
题意:
给你n个数,要进行m次操作
对于每次操作(l,r,v,p)代表:在区间[l,r]中有x(这个x是需要你自己找出来的)个数小于v,你需要把序列的第p个位置的值改成u∗k/(r−l + 1)
最后输出序列就完了
题解:
因为他要找出来区间中有多少数小于v,所以我们就要维护一个数组a,在这个a数组里面要放置每一块排序后的结束(我的代码是从小到大排序)。为什么要排序,因为对于一个序列排完序之后我们可以通过二分找出来小于v的那个数的位置,然后我们又知道每一个块的左区间位置和右区间位置,所以可以很简单求出来x的值
具体操作见代码:
1 #include <iostream>
2 #include<stdio.h>
3 #include<string.h>
4 #include<algorithm>
5 #include<math.h>
6 using namespace std;
7 const int maxn=300005;
8 int a[maxn],L[maxn],R[maxn],belong[maxn],b[maxn];
9 int l,r,v,p,n,m,u;
10 void build()
11 {
12 int len=sqrt(n);
13 int ci=n/len;
14 for(int i=1; i<=ci; ++i)
15 {
16 L[i]=len*(i-1)+1;
17 R[i]=len*i;
18 }
19 R[ci]=n;
20
21 for(int i=1; i<=ci; ++i)
22 {
23 for(int j=L[i]; j<=R[i]; ++j)
24 {
25 belong[j]=i;
26 }
27 sort(a+L[i],a+R[i]+1);
28 }
29 }
30 int query()
31 {
32 int ans=0;
33 if(belong[l]==belong[r])
34 {
35 for(int i=l; i<=r; ++i)
36 {
37 if(b[i]<v) ans++;
38 }
39 }
40 else
41 {
42 for(int i=l; i<=R[belong[l]]; i++) ans+=b[i]<v;
43 for(int i=belong[l]+1; i<belong[r]; i++)
44 ans+=lower_bound(a+L[i],a+R[i]+1,v)-a-L[i];
45 for(int i=L[belong[r]]; i<=r; i++) ans+=b[i]<v;
46 }
47 return ans;
48 }
49 void update(int x)
50 {
51 int pos=lower_bound(a+L[belong[p]],a+R[belong[p]]+1,b[p])-a;
52 x=(long long)u*x/(r-l+1);
53 a[pos]=x;
54 if(b[p]>x)
55 {
56
57 for(int i=pos; i>L[belong[p]]; i--)
58 {
59 if(a[i]<a[i-1]) swap(a[i],a[i-1]);
60 else break;
61 }
62 }
63 else if(b[p]<x)
64 {
65
66 for(int i=pos; i<R[belong[p]]; i++)
67 {
68 if(a[i]>a[i+1]) swap(a[i],a[i+1]);
69 else break;
70 }
71 }
72 b[p]=x;
73 }
74 int main()
75 {
76
77 while(~scanf("%d%d%d",&n,&m,&u))
78 {
79 for(int i=1; i<=n; ++i)
80 scanf("%d",&a[i]),b[i]=a[i];
81 build();
82 while(m--)
83 {
84 scanf("%d%d%d%d",&l,&r,&v,&p);
85 update(query());
86 }
87 for(int i=1; i<=n; ++i)
88 {
89 printf("%d\n",b[i]);
90 }
91 }
92 return 0;
93 }
94 /*
95 10 1 11
96 1
97 2
98 3
99 4
100 5
101 6
102 7
103 8
104 9
105 10
106 2 8 6 10
107 */
Array Transformer UVA - 12003的更多相关文章
- 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> ...
- UVa 12003 Array Transformer (分块)
题意:给定一个序列,然后有 m 个修改,问你最后的序列是什么,修改是这样的 l r v p 先算出从 l 到 r 这个区间内的 小于 v 的个数k,然后把第 p 个的值改成 k * u / (r - ...
- uva 12003 分块
大白上的原题,我就练练手... #include <bits/stdc++.h> using namespace std; typedef long long ll; ; ; ll blo ...
- 题解【UVA12003】Array Transformer
题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例#1 10 1 11 1 2 3 4 5 6 7 8 9 10 2 8 6 10 输出样例#1 1 2 3 4 5 6 7 8 9 6 ...
- Spark Mllib框架1
1. 概述 1.1 功能 MLlib是Spark的机器学习(machine learing)库,其目标是使得机器学习的使用更加方便和简单,其具有如下功能: ML算法:常用的学习算法,包括分类.回归.聚 ...
- Spark MLlib框架详解
1. 概述 1.1 功能 MLlib是Spark的机器学习(machine learing)库,其目标是使得机器学习的使用更加方便和简单,其具有如下功能: ML算法:常用的学习算法,包括分类.回归.聚 ...
- UVA - 348Optimal Array Multiplication Sequence(递推)
id=19208">题目:Optimal Array Multiplication Sequence 题目大意:给出N个矩阵相乘.求这些矩阵相乘乘法次数最少的顺序. 解题思路:矩阵相乘 ...
随机推荐
- .NET 5 程序高级调试-WinDbg
上周和大家分享了.NET 5开源工作流框架elsa,程序跑起来后,想看一下后台线程的执行情况.抓了个进程Dump后,使用WinDbg调试,加载SOS调试器扩展,结果无法正常使用了: 0:000> ...
- Payment Spring Boot 1.0.4.RELEASE 发布,最易用的微信支付 V3 实现
Payment Spring Boot 是微信支付V3的Java实现,仅仅依赖Spring内置的一些类库.配置简单方便,可以让开发者快速为Spring Boot应用接入微信支付. 欢迎ISSUE,欢迎 ...
- ctfhub技能树—sql注入—Refer注入
手注 查询数据库名 查询数据表名 查询字段名 查询字段信息 脚本(from 阿狸) #! /usr/bin/env python # _*_ coding:utf-8 _*_ url = " ...
- library cache pin解决方法
library cache pin大部分都是因为编译存储过程造成的 查找造成问题的数据库对象(一般为存储过程) SELECT * FROM v$session_wait WHERE event = ' ...
- LiteOS调测利器:backtrace函数原理知多少
摘要:本文将会和读者分享LiteOS 5.0版本中Cortex-M架构的backtrace软件原理及实现,供大家参考和学习交流. 原理介绍 汇编指令的执行流程 图 1 汇编指令的执行顺序 上图1所示, ...
- 大数据系列4:Yarn以及MapReduce 2
系列文章: 大数据系列:一文初识Hdfs 大数据系列2:Hdfs的读写操作 大数据谢列3:Hdfs的HA实现 通过前文,我们对Hdfs的已经有了一定的了解,本文将继续之前的内容,介绍Yarn与Yarn ...
- InnoDB 事务隔离级探索
https://mp.weixin.qq.com/s/gWYL2Th9Go5LDhkyGB_rYQ
- 4. Tomcat调优
1, 调内存 JVM 2, 调网络处理框架 普通io/nio,netty https://segmentfault.com/a/1190000008873688 https://ww ...
- 并发安全 sync.Map
https://mp.weixin.qq.com/s/MqPm7QH3_D9roVkpTs9Xpw 谈谈Go的并发安全相关 原创 歪鼻子 歪鼻子 2020-12-27 package main ...
- 6到8个月如何达到三年加得前端经验,对标P7,“慕课网 Java工程师2020”
百度网盘链接:https://pan.baidu.com/s/1xshLRO3ru0LAsQQ0pE67Qg 提取码:bh9f 阶段一:课程设计及前端创建脚手架开发 第1周 需求分析和架构设计 ...