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个矩阵相乘.求这些矩阵相乘乘法次数最少的顺序. 解题思路:矩阵相乘 ...
随机推荐
- 【Oracle】查询锁的相关SQL
--查看有锁的进程 select t2.username,t2.sid,t2.serial#,t2.logon_time,t2.state from v$locked_object t1,v$sess ...
- postgresql-12编译安装
1 准备环境 修改yum源 mkdir -p /etc/yum.bak mv /etc/yum.repos.d/* /etc/yum.bak/ &&\ curl -o /etc/yum ...
- django 组件 自定义过滤器 自定义标签 静态文件配置
组件 将一些功能标签写在一个html文件里,这个文件作为一个组件,如果那个文件需要就直接拿过来使用即可: 这是title.html文件,写了一个导航栏,作为一个公用的组件 <div style= ...
- 用APICloud开发iOS App Clip详细教程
App Clip是苹果公司在WWDC20开发者大会上发布的新功能,用户可以只访问应用程序的一小部分,而无需下载整个应用,被称为苹果小程序.本文主要介绍如何通过APICloud开发App Clip. 一 ...
- canvas性能-drawImage渲染图片
canvas性能-绘制图片 目录 canvas性能-绘制图片 canvas绘制图片 drawImage putImageData createPattern 测试绘制耗时 drawImage Imag ...
- C# Twain协议调用扫描仪,设置多图像输出模式(Multi image output)
Twain 随着扫描仪.数码相机和其他图像采集设备的引入,用户热切地发现了将图像整合到他们的文档和其他工作中的价值.然而,支持这种光栅数据的显示和操作成本很高,应用程序开发人员需要创建用户界面并内置设 ...
- LR 场景中Windows资源配置设置
监视连接前的准备工作 1)进入被监视windows系统,开启以下几个服务Remote Procedure Call(RPC) .Rmote Resgistry.Network DDE.Server.W ...
- celery 动态配置定时任务
How to dynamically add or remove tasks to celerybeat? · Issue #3493 · celery/celery https://github.c ...
- Win10家庭版Hyper-V出坑(完美卸载,冲突解决以及Device Guard问题)
本文链接:https://blog.csdn.net/hotcoffie/article/details/85043894 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附 ...
- Fody,告别烦人的INotifyPropertyChanged,最简方式实现通知!
INotifyPropertyChanged 我不是针对谁,我是说在座的各位 相信所有学wpf的,都写过类似下面的代码: 实现INotifyPropertyChanged public class M ...