题目描述

点进去看吧,说的不能再清楚了。

Solution

看到数据规模不难想到二分 WWW,然后用个前缀和优化一下即可。注意上下界。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm> using namespace std;
#define int long long
const int MAXN=200010; int n,m,s;
int maxx=-1,minn=0x3f3f3f3f;
int ans=(int)1e17l;
int Y,cnt;
int sumn[MAXN],sumv[MAXN];
int v[MAXN],w[MAXN];
int l[MAXN],r[MAXN]; int check(int x){
Y=cnt=0;
memset(sumn,0,sizeof(sumn));
memset(sumv,0,sizeof(sumv));
for(int i=1;i<=n;i++)
{
if(w[i]>=x) sumn[i]=sumn[i-1]+1,sumv[i]=sumv[i-1]+v[i];
else sumn[i]=sumn[i-1],sumv[i]=sumv[i-1];
}
for(int i=1;i<=m;i++)
Y+=(sumn[r[i]]-sumn[l[i]-1])*(sumv[r[i]]-sumv[l[i]-1]);
cnt=abs(Y-s);
return Y>s;
}
inline int read(){
int x=0; char c;
do c=getchar(); while(c<'0'||c>'9');
while(c>='0'&&c<='9')
x=x*10+c-48,c=getchar();
return x;
}
signed main(){
n=read();m=read();s=read();
for(int i=1;i<=n;++i){
w[i]=read();v[i]=read();
maxx=max(maxx,w[i]);minn=min(minn,w[i]);
}
for(int i=1;i<=m;++i){
l[i]=read();
r[i]=read();
}
int left=minn-1,right=maxx+2,mid;
while(left<=right){
mid=(left+right)/2;
if(check(mid))
left=mid+1;
else
right=mid-1;
ans=min(ans,cnt);
}
printf("%lld",ans);
}

最新文章

  1. seaJS循环依赖的解决原理
  2. linux-8 基本命令---date
  3. 知方可补不足~利用LogParser将IIS日志插入到数据库
  4. [Linux]安装phpredis扩展
  5. java 文件字节输出流
  6. Python的lambda
  7. jmeter之JDBC Request各种数据库配置
  8. 基于注解的Dubbo服务配置
  9. 自动化测试-2.seleniumIDE
  10. [国家集训队]JZPFAR
  11. 斯坦福2011秋季 iPad and iPhone Application Development 资源
  12. LRN(local response normalization--局部响应标准化)
  13. Gitolite 权限控制
  14. WebView之禁止调用第三方浏览器
  15. [转载]微软VS2015支持Android和iOS编程
  16. 在vs2012下编译出现Msvcp120d.dll 丢失的问题
  17. 安全删除linux旧内核的方法
  18. Java数组排序和搜索
  19. An error occurred during installation: No such plugin: cloudbees-folder
  20. 湖南联通发福利了C#为你月赚150M流量回家过年不再愁

热门文章

  1. Hive的动态分区
  2. nodejs实现聊天机器人
  3. 手撸基于swoole 的分布式框架 实现分布式调用(20)讲
  4. Anroid逆向学习从编写so到静动态调试分析arm的一次总结
  5. CentOS部署Harbor镜像仓库
  6. NIO入门-----01
  7. 【面试题】Java常见面试题
  8. logcat粗略了解(一)
  9. Spring 梳理-MVC-前端控制器DispatchServlet及URL请求处理过程
  10. httpclient整理