uva 12003 分块】的更多相关文章

大白上的原题,我就练练手... #include <bits/stdc++.h> using namespace std; typedef long long ll; ; ; ll block[N / SIZE + ][SIZE + ]; ll A[N]; int query(int L, int R, int v) { ; int lb = L / SIZE, rb = R / SIZE; if(lb == rb) { for(int i = L; i <= R; ++i) if(A[…
题意:给定一个序列,然后有 m 个修改,问你最后的序列是什么,修改是这样的 l r v p 先算出从 l 到 r 这个区间内的 小于 v 的个数k,然后把第 p 个的值改成 k * u / (r - l + 1). 析:分块,每块长度是sz,把每一块都排序.然后在每次修改的时候,只要计算出 l 和 r 所在块,中间的用二分可以算出来.注意同时要把分块中的数也改掉. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000")…
Array Transformer Time Limit: 5000ms Memory Limit: 131072KB This problem will be judged on UVA. Original ID: 1200364-bit integer IO format: %lld      Java class name: Main   Write a program to transform an array A[1], A[2],..., A[n] according to m in…
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3154 题意是,要求求出区间中小于某个值的数有多少个,然后利用这个个数来更新某个点的值. 直接树套树解决问题,不过这题时间卡的比较紧.留心观察可以发现,询问的数目其实是比较小的,可是总的个数多大30W.如果是O(n*logn*logn)的复杂度建树就会超时,估计这里就是卡这一个了.其余的都不难…
白皮书393页面. 乱搞了原始数组中.其实用另一种阵列块记录. 你不能改变原始数组. 请注意,与原来的阵列和阵列块的良好关系,稍微细心处理边境.这是不难. #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #define maxn 300005 #define SIZE 600 using namespace std; int a[maxn]; int…
题目:传送门 题意: 给你n个数,要进行m次操作 对于每次操作(l,r,v,p)代表:在区间[l,r]中有x(这个x是需要你自己找出来的)个数小于v,你需要把序列的第p个位置的值改成u∗k/(r−l + 1) 最后输出序列就完了 题解: 因为他要找出来区间中有多少数小于v,所以我们就要维护一个数组a,在这个a数组里面要放置每一块排序后的结束(我的代码是从小到大排序).为什么要排序,因为对于一个序列排完序之后我们可以通过二分找出来小于v的那个数的位置,然后我们又知道每一个块的左区间位置和右区间位置…
对于一个正整数N,给出C组限制条件,每组限制条件为N%X[i]∈{Y1,Y2,Y3,...,Yk[i]},求满足条件的前S小的N. 这道题很容易想到用中国剩余定理,然后用求第k小集合的方法输出答案.但是一取模,孰大孰小就不好控制了,所以行不通.直接枚举所有情况的话,总方案数(所有k的乘积)高达C*k,显然也是不行的. 还有一种方法是枚举所有可能的N,然后检验是否满足条件.对于每个满足条件的N,任取某个限制条件i,对于其中某个余数j,都可以写成X[i]*t+Y[i][j]的形式.复杂度未知,但总方…
题意: 统计[a, b]或[b, a]中0~9这些数字各出现多少次. 分析: 这道题可以和UVa 11361比较来看. 同样是利用这样一个“模板”,进行区间的分块,加速运算. 因为这里没有前导0,所以分块的时候要多分几种情况. 以2345为例,这是一个四位数,首先要计算一下所有的一位数.两位数以及三位数各个数字出现的个数. 对应的模板分别为n,n*,n**,其中n代表非零数字,*代表任意数字. 考虑这样一个长为l的模板****(l个*),这样的数共10l个,而且各个数字都是等频率出现,所以每个数…
题意: long long H(int n){ long long res = 0; for( int i = 1; i <= n; i=i+1 ){ res = (res + n/i); } return res;} 求这样一个函数的值. 分析: 这个题很像我做莫比乌斯反演时的一个分块加速的优化. 注意到n/i的整数部分,有许多重复的数.具体一点,对于某一个i,在区间[i, n / (n / i)]中n/i的值是一样的. 例如在[17, 20]中的i,100/i的值都是5. #include…
背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现意外的情况. 但是在有些业务场景中,大文件上传又是必须的,比如邮箱附件,或者内部OA等等. 问题 服务端为什么不能直接传大文件?跟php.ini里面的几个配置有关 upload_max_filesize = 2M //PHP最大能接受的文件大小 post_max_size = 8M //PHP能收到的最大PO…