loj2274 「JXOI2017」加法
二分一下,然后从左到右扫描,扫到左端点就把区间 push 到堆里。
每次有点不符合二分的值时,就贪心地选择右端点最远的 add。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int T, n, m, k, aa, dui[200005], din, a[200005], sta[200005], cnt, j, c[200005];
int uuu;
struct Node{
int lll, rrr;
}nd[200005];
bool cmp(Node x, Node y){
return x.lll<y.lll;
}
int lb(int x){
return x&-x;
}
void add(int p, int x){
for(int i=p; i<=n+1; i+=lb(i))
c[i] += x;
}
int query(int p){
int re=0;
for(int i=p; i; i-=lb(i))
re += c[i];
return re;
}
bool chk(int lim){
memset(c, 0, sizeof(c));
din = cnt = uuu = 0;
j = 1;
for(int i=1; i<=n; i++)
if(a[i]<lim)
sta[++cnt] = i;
for(int i=1; i<=cnt; i++){
while(j<=m && nd[j].lll<=sta[i]){
dui[++din] = nd[j].rrr;
push_heap(dui+1, dui+1+din);
j++;
}
while(a[sta[i]]+query(sta[i])<lim){
uuu++;
if(uuu>k || !din) return false;
add(sta[i], aa);
add(dui[1]+1, -aa);
pop_heap(dui+1, dui+1+din);
din--;
}
}
return true;
}
int main(){
cin>>T;
while(T--){
scanf("%d %d %d %d", &n, &m, &k, &aa);
for(int i=1; i<=n; i++)
scanf("%d", &a[i]);
for(int i=1; i<=m; i++)
scanf("%d %d", &nd[i].lll, &nd[i].rrr);
sort(nd+1, nd+1+m, cmp);
int l=1, r=120000000, mid, re;
while(l<=r){
mid = (l + r) >> 1;
if(chk(mid)) re = mid, l = mid + 1;
else r = mid - 1;
}
printf("%d\n", re);
}
return 0;
}
loj2274 「JXOI2017」加法的更多相关文章
- 【LOJ】#2275. 「JXOI2017」颜色
题解 我们枚举右端点判断合法的左端点有哪些 首先,记录一下右端点右边的点的pre,也就是这个数字前一个出现的位置,取所有小于枚举右端点r的值中最大的一个做为l,用优先队列维护即可,[l + 1,r]就 ...
- loj2275 「JXOI2017」颜色
枚举右端点,然后看左端点合法情况. 先预处理每个颜色 \(i\) 的最大出现位置 \(max_i\) 和最小出现位置 \(min_i\).对于枚举右端点在一个位置 \(i\),凡是 \(max_k & ...
- 「译」JavaScript 的怪癖 1:隐式类型转换
原文:JavaScript quirk 1: implicit conversion of values 译文:「译」JavaScript 的怪癖 1:隐式类型转换 译者:justjavac 零:提要 ...
- 「NOI2017」整数 解题报告
「NOI2017」整数 有一些比较简单的\(\log^2n\)做法 比如暴力在动态开点线段树上维护每个位置为\(0\)还是\(1\),我们发现涉及到某一位加上\(1\)或者减去\(1\)实际上对其他位 ...
- 「MoreThanJava」计算机发展史—从织布机到IBM
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- 「MoreThanJava」一文了解二进制和CPU工作原理
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- 「MoreThanJava」机器指令到汇编再到高级编程语言
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- 「CF521D」 Shop
「CF521D」 Shop 传送门 题目说是有三种操作,首先可以知道赋值操作是可以转化为加法操作的,即 \((1,b) \rightarrow (2,b-a_i)\) 然后加法对于一个数你肯定优先选择 ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
随机推荐
- [已读]高性能JavaScript
值得多读几遍的书.
- HDU 5869 Different GCD Subarray Query 树状数组 + 一些数学背景
http://acm.hdu.edu.cn/showproblem.php?pid=5869 题意:给定一个数组,然后给出若干个询问,询问[L, R]中,有多少个子数组的gcd是不同的. 就是[L, ...
- kafka基础二
kafka生产者工作流程 消息产生分析 1.写入方式: producer采用推(push)模式将消息发布到broker,每条消息都会被追加(append)到分区Partition上,属于顺序写磁盘(顺 ...
- plpgsql 数组、JSON相关
Function Return Type Description Example Result array_append(anyarray,anyelement) anyarray append an ...
- jquery select取option的value值发生变化事件
html代码如下所示: <div id = "schedule"> <label>是否设置:</label> <select name=& ...
- 初学者应该怎么学习前端?web前端的发展路线大剖析!
写在最前: 优秀的Web前端开发工程师要在知识体系上既要有广度和深度!应该具备快速学习能力. 前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化.SEO和服务器端的基础知识,而且要学会运用 ...
- Chisel语言
1 What is Chisel? Chisel(Constructing Hardware In a Scala Embedded Language)是一种嵌入在高级编程语言Scala的硬 ...
- ScriptManager对象的属性
--<本文属于摘抄> 属性 说明 EnablePageMethods 指定在ASPX页面上定义的公共静态方法是否可以从客户端脚本中作为Web服务方法调用 EnablePartialRend ...
- 覆盖alert对话框-自制Jquery.alert插件
Javascript 代码: (function ($) { 'use strict'; window.alert = $.alert = function (msg) { var defaultOp ...
- 最近在准备面试,总结了几个java中面向对象的几个问题,问题本事还不够全面,要想知道还是要自己去找,但是在面试上应该是没多大问题了
Overload(重载)与Override(重写)的区别 重载:发生在一个类中,方法名称相同,参数列表不同,方法体不同(看对象类型) 重写:发生在父类中,方法名称相同,参数列表相同,方法体不同(看引用 ...