题目链接:传送门

题目大意:给你n个物品,每件物品有重量 W 和价值 V,给m个区间,和一个标准值。(n,m最大200000)

     要求找到一个值x,使得m个所有区间的权值和与标准值的差的绝对值最小。单个区间权值计算公式(数目num=0,价值sum=0,若满足 Wi >= x ,则++num,sum+=Vi)

     单个区间权值为num*sum

题目思路: 二分+前缀和

   首先权值和与X是递减关系,X越大所得值越小,我们容易想到二分,但是m个区间的比较判断怎么处理,如果直接模拟,复杂度最大可达 n^2logn 显然不行

     其实我们可以,用前缀和的想法,用一个数组num 表示1~i 满足W>=x的个数,sum对应为满足条件的W对应的V之和,那么对于区间我们可直接O(1)得值

     每次前缀处理O(n) ,所以总复杂度 nlogn ,还有此题需用long long 不然WA

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include<functional>
#include <set>
#include <map>
#include <climits>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
using namespace std;
#define gamma 0.5772156649015328606065120
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define N 200005
#define maxn 10000500
typedef pair<int,int> PII;
typedef long long LL; LL n,m;
LL k,sta,l=-,r,ans=1ll<<;
struct Node{
LL x,v;
}node[N];
struct Seg{
LL x,y;
}seg[N];
LL num[N],sum[N];
bool match(LL x){
for(LL i=;i<=n;++i){
num[i]=num[i-];sum[i]=sum[i-];
if(node[i].x>=x){++num[i];sum[i]+=node[i].v;}
}
LL temp=;
for(LL i=;i<=m;++i){
LL t1=seg[i].x,t2=seg[i].y;
temp+=(sum[t2]-sum[t1-])*(num[t2]-num[t1-]);
}
temp=temp-sta;
ans=min(ans,llabs(temp));
return temp>=;
}
int main(){
LL i,j,v;
scanf("%lld%lld%lld",&n,&m,&sta);
for(i=;i<=n;++i){scanf("%lld%lld",&node[i].x,&node[i].v);r=max(r,node[i].x);}
for(i=;i<=m;++i){scanf("%lld%lld",&seg[i].x,&seg[i].y);}
++r;
while(l<=r){
LL mid=l+r>>;
if(match(mid)){
l=mid+;
}
else r=mid-;
}
printf("%lld\n",ans);
return ;
}

最新文章

  1. 四核驱动的三维导航—淘宝新UI(设计篇)
  2. 【Win 10开发】协议-上篇:自定义应用协议
  3. Android 开发框架汇总
  4. logDemo
  5. 使用Navicat for Oracle新建表空间、用户及权限赋予---来自烂泥
  6. mybatis写mapper文件注意事项(转)
  7. android 获取手机型号,本机电话号码,SDK版本以及firmwarw版本号(即系统版本号)
  8. 《MySQL必知必会》读书笔记
  9. Linux命令总结(转载)
  10. ubuntu netbeans compile ygopro client with google protobuf lib
  11. JSON 格式化为易读格式的字符串
  12. 如何在NodeJS项目中优雅的使用ES6
  13. sqoop 操作从hdfs 导入到mysql中语句
  14. Java8 lamda表达式快速上手
  15. UVALive - 3942:Remember the Word
  16. UE、UI、UCD、UED?职责划分?
  17. Android用户点击返回按钮两次退出整个APP
  18. 洛谷试炼场 - 关卡1-5 - 简单字符串 - (Done)
  19. HTML和CSS的静态页面
  20. eclipse 大括号 改为C语言风格

热门文章

  1. 学会Git玩转Github笔记(二)——Git使用
  2. Oem7F7 通用完美激活v7.0绿色版 永久激活Windows7/2008
  3. 解决 SQL Server2012附加出错的问题
  4. PL/SQL 美化器不能解析文本
  5. html调用摄像头的方法汇总
  6. AMQP &amp;&amp; MQTT comparision
  7. Paper Reading 1 - Playing Atari with Deep Reinforcement Learning
  8. CentOS下安装man手册
  9. [position]返回顶部
  10. 李洪强详细介绍SDWebImage