vijos P1740 聪明的质检员
2024-09-27 08:45:45
题目链接:传送门
题目大意:给你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 ;
}
最新文章
- 四核驱动的三维导航—淘宝新UI(设计篇)
- 【Win 10开发】协议-上篇:自定义应用协议
- Android 开发框架汇总
- logDemo
- 使用Navicat for Oracle新建表空间、用户及权限赋予---来自烂泥
- mybatis写mapper文件注意事项(转)
- android 获取手机型号,本机电话号码,SDK版本以及firmwarw版本号(即系统版本号)
- 《MySQL必知必会》读书笔记
- Linux命令总结(转载)
- ubuntu netbeans compile ygopro client with google protobuf lib
- JSON 格式化为易读格式的字符串
- 如何在NodeJS项目中优雅的使用ES6
- sqoop 操作从hdfs 导入到mysql中语句
- Java8 lamda表达式快速上手
- UVALive - 3942:Remember the Word
- UE、UI、UCD、UED?职责划分?
- Android用户点击返回按钮两次退出整个APP
- 洛谷试炼场 - 关卡1-5 - 简单字符串 - (Done)
- HTML和CSS的静态页面
- eclipse 大括号 改为C语言风格
热门文章
- 学会Git玩转Github笔记(二)——Git使用
- Oem7F7 通用完美激活v7.0绿色版 永久激活Windows7/2008
- 解决 SQL Server2012附加出错的问题
- PL/SQL 美化器不能解析文本
- html调用摄像头的方法汇总
- AMQP &;&; MQTT comparision
- Paper Reading 1 - Playing Atari with Deep Reinforcement Learning
- CentOS下安装man手册
- [position]返回顶部
- 李洪强详细介绍SDWebImage