题意:给你一个序列,每次操作可以使一段连续的序列加1,每次更新完后输出这个序列的中位数。

注意到中位数的大小只会增加,不会减小,并且每次操作后最多使中位数加1.

将原序列分块操作,若块在询问的【L,R】中,则使块的cnt++,这样只对询问区间的首尾单独操作即可。

每次更新后查找序列中小于等于当前中位数的个数,如果个数小于等于n/2.则中位数++。

查找小于等于中位数的个数时用lower_bound会超时,可以存一个计数器p表示更新前的个数,因为大部分的区间p值不会改变。(但是最坏复杂度大了很多= =)

代码:

#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define lson o<<1
#define rson o<<1|1
#define CLR(A, X) memset(A, X, sizeof(A))
using namespace std;typedef long long LL;
typedef pair<int, int> PII;
const double eps = 1e-10;
int dcmp(double x){if(fabs(x)<eps) return 0; return x<0?-1:1;}
const int N = 6e4+5;struct node {int len, cnt, p;PII a[300];void clear() { len = cnt = p = 0; }void push_back(int x, int y) { a[len++] = {x, y}; }void my_sort() { sort(a, a+len); }void update(int L, int R) {for(int i = 0; i < len; i++) {if(a[i].se<=R && a[i].se>=L) {a[i].fi++;}}my_sort();}int sum(int x) {while(p>=0 && a[p].fi+cnt>x) p--;while(p+1<len && a[p+1].fi+cnt<=x) p++;return p+1;}
}b[300];int a[N];int main() {int n, q, x;while(~scanf("%d%d", &n, &q)) {if(!n && !q) continue;int len = sqrt(n+0.5), tot = n/len+!!(n%len);for(int i = 0; i < tot; i++) b[i].clear();for(int i = 0; i < n; i++) {scanf("%d", &a[i]);b[i/len].pb(a[i], i);}for(int i = 0; i < tot; i++) b[i].my_sort();sort(a, a+n);int Mid = a[n/2];while(q--) {int L, R;scanf("%d%d", &L, &R);L--, R--;for(int i = L/len+1; i < R/len; i++) b[i].cnt++;if(L/len == R/len) b[L/len].update(L, R);else {b[L/len].update(L, (L/len+1)*len-1);b[R/len].update((R/len)*len, R);}int tmp = 0;for(int i = 0; i < tot; i++) {tmp += b[i].sum(Mid);}if(tmp <= n/2) Mid++;printf("%d\n", Mid);}}return 0;
}

UVALive 6860 Most Influential Pumpkin相关推荐

  1. [分块]Most Influential Pumpkin

    题目:Most Influential Pumpkin 分析: 将原序列a分块,并保持块内元素升序排列,存于b. 对于每次查询l, r,左右两端的块的暴力+1,中间的块的懒惰标记+1. 设上一次的中位 ...

  2. DP UVALive 6506 Padovan Sequence

    题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...

  3. AI近10年21个子领域高引学者(AI-10 Most Influential Scholars )

    转自"SciTouTiao"微信公众号 本文约2100字,建议阅读9分钟. 本文节选了和AI相关的21个子领域顶会或者期刊论文的高引学者列表. [ 导读 ]近10年,人工智能发展迅 ...

  4. The UVALIVE 7716 二维区间第k小

    The UVALIVE 7716 二维区间第k小 /** 题意:给一个n * n的矩阵,有q个查询每次查询r,c,s,k表示已(r,c)为右上角 大小为s的正方形中 第k小的元素n <= 250 ...

  5. UVALive 8513 lovers 2017 西安区域赛 B 贪心+multiset

    UVALive 8513 有2种人,每个人有自己的权值$A_i$ $B_i$ 当$A_i + B_i >=K$时 两个人可以配对 问最多多少人可以配对 解法 : 把$/{ A_i /}$ 排序 ...

  6. 训练指南 UVALive - 3713 (2-SAT)

    layout: post title: 训练指南 UVALive - 3713 (2-SAT) author: "luowentaoaa" catalog: true mathja ...

  7. 逆序数 UVALive 6508 Permutation Graphs

    题目传送门 1 /* 2 题意:给了两行的数字,相同的数字连线,问中间交点的个数 3 逆序数:第一行保存每个数字的位置,第二行保存该数字在第一行的位置,接下来就是对它求逆序数 4 用归并排序或线段树求 ...

  8. Infinite Fraction Path UVALive - 8207

    Infinite Fraction Path UVALive - 8207 题意: 给你n个数,每个数在0到9之间,每个数的下标一次是0~n-1,然后他所能走到的数为(i^2+1)%n,i为他本身的下 ...

  9. F - Heron and His Triangle UVALive - 8206

    F - Heron and His Triangle UVALive - 8206 题意: 给你应该n,然后求一个最小的t,问长度为t-1,t,t+1所组成的三角形的面积为整数,t>=n 题解: ...

最新文章

  1. 你的首个 Progressive Web App
  2. Android通过百度地图API用Service和Alarm在后台定时获取地理位置信息
  3. java怎么获取固定的日期,如何获取一个指定时间的java.util.Date对象
  4. jenkins中通过Publish Over SSH将项目部署到远程机器上
  5. django Exception Value:no such table: cmdb_XXX
  6. 我的asp入门宝典与您分享
  7. solr cloud 更新 solrconfig 配置_Solr各版本新特性「4.x,5.x,6.x,7.x」
  8. “三十而已”女性洞察报告
  9. Node.js:入门资料
  10. 单链表的增、删、查、改、python实现,超详细讲解
  11. 【英语学习】【Daily English】U09 Fashion L04 It helps if you look the part
  12. c语言高级工程师试题,2020年.Net中高级开发工程师笔试题带答案(3)
  13. 孔茨的现代管理理论的十一个流派
  14. 知识分享|日本面试常考问题+巧妙回答 ②
  15. java 舆情分析_基于jsp的舆情监测系统-JavaEE实现舆情监测系统 - java项目源码
  16. CentOS 5 安装和配置无线网卡指南
  17. 动态隐藏和显示导航栏 (MTK)
  18. 【人工智能Prolog】Prolog解决数独问题
  19. mysql 按时间累计计算_mysql查询——计算占比与累计占比
  20. codeforces 628.div2

热门文章

  1. inkscape工具箱:选择和变换工具(快捷键F1)
  2. 遥控器的辨型 对码 对拷和焊码
  3. Strong-Convexity
  4. 计算机相关期刊阅读,计算机领域的所有SCI一区期刊,这是最顶级期刊了.doc
  5. C语言试题106之有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
  6. flask入门和进阶五(关注功能的实现Followers)
  7. 饿了么建生鲜开放平台 买菜业务要推至全国500城
  8. LED MEO GTO GEO IGSO SSO概念
  9. 吴恩达机器学习第一周测试
  10. ODU帧转OTU帧流程