题目

传送门:QWQ

分析

两道题目

第一问暴力预处理

用$ a[i][j][k] $和$ s[i][j][k] $ 表示从$ (1,1) $ 到 $ (i,j) $ 这个矩形中比k大的数的个数和这些数的和。

对于询问我们二分k,得出答案(最后还要减掉一些值一样的东西 详见代码)

第二问主席树

r=1时只有一个数列,我们要求的是用多少数可以大于等于h

用主席树搞,询问时就像询问区间第k大时一样向左向右走,只不过要再套个二分。

代码

#include <bits/stdc++.h>
using namespace std;
const int maxn=;
int s[][][],a[][][],p[][];
int rt[maxn], newp, ls[], rs[], sum[], v[];
//int rt[maxn], newp, ls[10000100], rs[10000100], sum[10000100], v[10000100]; int r,c,m;
inline int in()
{
char c=getchar();int x=;
while (c<''||c>'') c=getchar();
while (c>=''&&c<='') x=x*+c-'',c=getchar();
return x;
}
void insert(int l,int r,int x,int &cur,int cur1){
cur=++newp;
ls[cur]=ls[cur1]; rs[cur]=rs[cur1];
sum[cur]=sum[cur1]+x; v[cur]=v[cur1]+;
if(l==r) return;
int mid=l+r>>;
if(x<=mid) /*ls[cur]=ls[cur1],*/insert(l,mid,x,ls[cur],ls[cur1]);
else /*rs[cur]=rs[cur1],*/insert(mid+,r,x,rs[cur],rs[cur1]);
}
int query(int x,int y,int h)
{
x=rt[x-];y=rt[y];
if(sum[y]-sum[x]<h) return -;
int l=,r=,ans=;
while(l<r){
int mid=(l+r)>>;
if(sum[rs[y]]-sum[rs[x]]<h){
ans+=v[rs[y]]-v[rs[x]]; h-=sum[rs[y]]-sum[rs[x]]; x=ls[x]; y=ls[y]; r=mid;
// printf("----- %d\n",v[rs[y]]-v[rs[x]]);
}
else {
l=mid+; x=rs[x]; y=rs[y];
}
}
ans+=(h+l-)/l;
return ans;
}
int main()
{
r=in();c=in();m=in();
if(r!=){
for(int i=;i<=r;i++)
for(int j=;j<=c;j++) p[i][j]=in();
for(int i=;i<=r;i++)
for(int j=;j<=c;j++)
for(int k=;k<=;k++)
{
a[i][j][k]=a[i-][j][k]+a[i][j-][k]-a[i-][j-][k];
s[i][j][k]=s[i-][j][k]+s[i][j-][k]-s[i-][j-][k];
if(p[i][j]>=k){
a[i][j][k]++; s[i][j][k]+=p[i][j];
}
}
while(m--){
int x1=in(),y1=in(),x2=in(),y2=in(),h=in();
int l=,r=,ans; x1--;y1--;
while(l+<r){
int mid=(l+r)>>;ans=s[x2][y2][mid]-s[x2][y1][mid]-s[x1][y2][mid]+s[x1][y1][mid];
if(ans>=h) l=mid; else r=mid;
}
int sum1=a[x2][y2][l]-a[x2][y1][l]-a[x1][y2][l]+a[x1][y1][l],
sum2=s[x2][y2][l]-s[x2][y1][l]-s[x1][y2][l]+s[x1][y1][l];
if(l==){puts("Poor QLW"); continue;}
else printf("%d\n",sum1-(sum2-h)/l);
}
}
else{
for(int i=;i<=c;i++){
int t=in();
insert(,,t,rt[i],rt[i-]);
}
while(m--){
int x1=in(),y1=in(),x2=in(),y2=in(),h=in();
int ans=query(y1,y2,h);
if(ans==-) puts("Poor QLW");
else printf("%d\n",ans);
}
}
return ;
}

【BZOJ】1926: [Sdoi2010]粟粟的书架(暴力+主席树)的更多相关文章

  1. 【BZOJ1926】粟粟的书架(主席树,前缀和)

    [BZOJ1926]粟粟的书架(主席树,前缀和) 题面 Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co ...

  2. bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1926 题面; 1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Se ...

  3. Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ...

  4. 【刷题】BZOJ 1926 [Sdoi2010]粟粟的书架

    Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R行C 列的巨型书架,书 ...

  5. BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案)

    BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案) 题意 : 给你一个长为\(R\)宽为\(C\)的矩阵,第\(i\)行\(j\)列的数为\(P_{i,j}\). 有\(m\)次 ...

  6. bzoj1926[Sdoi2010]粟粟的书架 二分 主席树

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec  Memory Limit: 552 MBSubmit: 1064  Solved: 421[Submit][Stat ...

  7. BZOJ1926 [Sdoi2010]粟粟的书架 【主席树 + 二分 + 前缀和】

    题目 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co rmen 的文章.粟粟家中有一个 R行C 列的巨型书架,书架的每一个位置都 ...

  8. Bzoj 2588: Spoj 10628. Count on a tree 主席树,离散化,可持久,倍增LCA

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2588 2588: Spoj 10628. Count on a tree Time Limit ...

  9. 【BZOJ 4556】[Tjoi2016&Heoi2016]字符串 SAM+二分+主席树

    这道题市面上就两种法:一种是SA+二分+主席树,一种是SAM+二分+主席树(有不少人打线段树合并???)(除此之外还有一种利用炒鸡水的数据的暴力SA,贼快.....)(当时学SA的时候没做这道题,现在 ...

随机推荐

  1. ADO Recordset 对象链接

    http://baike.baidu.com/link?url=4Xdc46R8M5uj-BbOGaH761N5oDEYlGQJFeR2WbPwx1iQBusAUKU3qbWcHZCMmayatj9n ...

  2. mybatis分页查询

    方式1: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返回后n条记录.无疑该查询能够实现分页功能,但是如果m的 ...

  3. Android组件化开发实践

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/76533115 http://mdsa.51cto.com/art/201707/544 ...

  4. $.ajax 的速度要快于 angular 里 $http (个别情况)

    $.ajax: $http:

  5. Ubuntu在图形界面和命令行界面都循环登录解决办法

    在做机器ip变化自动发送邮件的时候,在/etc/profile.d/目录下添加了一个脚本,重启的时候就循环登录了,无论是在图形界面还是命令行界面. 解决方法:利用系统U盘进入系统进行修改,具体如下: ...

  6. 你离BAT之间,只差这一套Java面试题

    最近,各大公司开始了春招,很多人已经开始在准备面试了,特地来总结下初中级程序员应该掌握的面试题目.这篇面试指南,只适用于初中级程序员,其中不涉及分布式等问题.关于中高级的程序员问题,我后面可能再出一篇 ...

  7. VSS虚拟交换系统

    下面介绍一下如何在CISCO交换机上配置VSS,具体配置如下: //在CISCO1 上配置vss域,两台设备都要在同一个域中 Cisco-(confgi)#switch virtual domain ...

  8. angular使用遇到的问题

    http://www.angularjs.cn/A0a6 用路由的时候,在js里写jquery的事件dom操作失效,只有在子页面里嵌套js才生效(jquery也不行).解决办法就是把dom操作用ng- ...

  9. Spring 学习笔记(一)

    # IOC, DI # ApplicationContext.xml 描述类之间的依赖注入关系 # 初始化Bean工厂的两种方式 ## ClassPathXmlApplicationContext # ...

  10. C的文件操作函数

    fgetc(FILE *)意为从文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节fputc(char,FILE*)将字符ch写到文件指针fp所指向的文件的当前写指针的 ...