二分答案后得到每个位置需要被加的次数。考虑贪心。从左到右考虑每个位置,将以该位置为左端点的区间按右端点从大到小加进堆。看该位置还需要被加多少次,如果不需要加了就不管,否则取堆顶区间将其选择,BIT实现区间覆盖。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int T,n,m,k,a[N],c[N],tree[N];
priority_queue<int> q;
vector<int> b[N];
void add(int k,int x){while (k<=n) tree[k]+=x,k+=k&-k;}
int query(int k){int s=;while (k) s+=tree[k],k-=k&-k;return s;}
bool check()
{
for (int i=;i<=n;i++) tree[i]=;int cnt=;
while (!q.empty()) q.pop();
for (int i=;i<=n;i++) add(i,c[i]-c[i-]);
for (int i=;i<=n;i++)
{
for (int j=;j<b[i].size();j++) q.push(b[i][j]);
int x=query(i);
for (;x>;x--)
{
if (q.empty()) return ;
int y=q.top();q.pop();
if (y<i) return ;
add(i,-),add(y+,);
if ((++cnt)>k) return ;
}
}
return ;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj5321.in","r",stdin);
freopen("bzoj5321.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
T=read();
while (T--)
{
n=read(),m=read(),k=read();int p=read();
int l=,r,ans;
for (int i=;i<=n;i++) l=min(l,a[i]=read()),b[i].clear();
for (int i=;i<=m;i++)
{
int x=read(),y=read();
b[x].push_back(y);
}
r=l+m*p;
while (l<=r)
{
int mid=l+r>>;
for (int i=;i<=n;i++) c[i]=mid<=a[i]?:(mid-a[i]-)/p+;
if (check()) l=mid+,ans=mid;
else r=mid-;
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. CSharpGL(36)通用的非托管数组排序方法
  2. Oracle Dataguard之failover
  3. TFS 2012 在IE11和Chrome (Windows 8.1) 显示英文的解决方案
  4. 你可能不知道的java、python、JavaScript以及jquary循环语句的区别
  5. 在ubuntu 部署svn服务器
  6. MyEclipse 8.5 Axis2 插件完整jar包
  7. 升级ssh编译错误
  8. isset(), empty()
  9. Android用gif做启动页
  10. Hadoop-Yarn-HA集群搭建(搭建篇)
  11. 转载 LayoutInflater的inflate函数用法详解
  12. vue-auto-focus: 控制自动聚焦行为的 vue 指令
  13. 【T-SQL进阶】02.理解SQL查询的底层原理
  14. Java并发之线程
  15. 201521123121 《Java程序设计》第9周学习总结
  16. 使用jvisualvm远程监控Java程序
  17. ThinkPHP中浏览器友好输出函数
  18. Dynamics CRM2011中通过JS脚本方式显示和隐藏ribbon中的自定义按钮
  19. 音视频下载Chrome插件 官方主页
  20. flutter mac 下安装

热门文章

  1. 取消Ubuntu18.04开机输入密码登录
  2. pytest使用笔记(二)——pytest+allure配置使用
  3. python多线程与GIL(转)
  4. Java创建对象的动作分析
  5. Notes of Daily Scrum Meeting(11.4)
  6. Daily Srum 10.28
  7. alpha版postmortem 报告
  8. 用java构造一个带层次的文件目录遍历器
  9. bug排查
  10. 浏览器播放rtmp流