【题目链接】:http://noi.qz5z.com/viewtask.asp?id=z05

【题解】



显然w越大,最后的Y也就越大;

可以依靠这个搞二分;

如果二分枚举的tw得到的Y比S小,则减小tw以增大Y,否则增大tw就好;

那个区间的和可以用前缀和搞出来(确定当前的tw然后搞前缀和);

枚举一下m个区间,每个区间都能O(1)搞出来则m个区间为O(m);然后前缀和搞一下是O(n);

然后二分w为O(logw);

总的复杂度为O(logw*(n+m));

完全可以接受了;



【完整代码】

#include <algorithm>
#include <cstdio>
#define LL long long using namespace std; const int MAXN = 2e5+100;
const LL INF = 1e18; int sum[MAXN];
LL w[MAXN],v[MAXN];
LL sumv[MAXN]; int n,m,query[MAXN][2];
LL s,ans = INF; LL jue(LL x)
{
if (x>=0)
return x;
else
return -x;
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
scanf("%d%d%I64d",&n,&m,&s);
for (int i = 1;i <= n;i++)
scanf("%I64d%I64d",&w[i],&v[i]);
for (int i = 1;i <= m;i++)
scanf("%d%d",&query[i][0],&query[i][1]);
int l = 0,r = 1000000;
while (l <= r)
{
int tw = (l+r)>>1;
sum[0] = 0;sumv[0] = 0;
for (int i = 1;i <= n;i++)
if (w[i]>=tw)
sum[i] = sum[i-1]+1,sumv[i] = sumv[i-1]+v[i];
else
sum[i] = sum[i-1],sumv[i] = sumv[i-1];
LL temp = 0;
for (int i = 1;i <= m;i++)
{
LL tem1 = sum[query[i][1]]-sum[query[i][0]-1];
LL tem2 = sumv[query[i][1]]-sumv[query[i][0]-1];
temp += tem1*tem2;
}
ans = min(ans,jue(temp-s));
if (temp >s)
l = tw+1;
else
r = tw-1;
}
printf("%I64d\n",ans);
return 0;
}

最新文章

  1. Go语言实战 - revel框架教程之CSRF(跨站请求伪造)保护
  2. 我 &amp;&amp; symfony3 (路由)
  3. 实现SQL Server中的切割字符串SplitString函数,返回Table
  4. dedecms内容页 上下篇 添加文章描述方法
  5. 用python matplotlib 画图
  6. 编写 Window 服务程序
  7. 用java获取歌曲文件的专辑封面元信息
  8. NOIP2012 同余方程
  9. 所有Mac用户都需要知道的9个实用终端命令行&lt;转&gt;
  10. UVa 836 - Largest Submatrix
  11. VS调试技巧之附加进程
  12. 【百度地图API】你看过房产地图吗?你知道房产标注是如何建立的吗?
  13. canvas 水波纹
  14. 鸟哥的 Linux 私房菜Shell Scripts篇(一)
  15. MeasureSpec 的三中类型
  16. redis 缓存类型为map
  17. Ajax返回乱码
  18. 2743: [HEOI2012]采花
  19. python3爬虫.4.下载煎蛋网妹子图
  20. 抓包工具Fidder移动端HTTP请求抓包详解

热门文章

  1. POJ 3037 SPFA
  2. 调用C#版gdal库的一个注意事项
  3. 分享一段css代码学到的js知识
  4. ajax的使用(一)
  5. C/C++(数据结构栈的实现)
  6. logname---显示用户名称
  7. ReactNavtive框架教程(4)
  8. js23---工厂模式1
  9. 【例题 8-3 UVA - 1152】4 Values whose Sum is 0
  10. jsp中标签id和name的区别(转)