1926: [Sdoi2010]粟粟的书架
大概就是分情况乱搞。。
经典维护二维前缀和暴力+莫队算法
垫底QAQ
#include <bits/stdc++.h>
using namespace std;
namespace my_useful_tools {
#define rep(_i, _k, _j) for(int _i = _k; _i <= _j; ++_i)
#define foreach(_i, _s) for(typeof(_s.begin()) _i = _s.begin(); _i != _s.end(); ++_i)
#define pb push_back
#define mp make_pair
#define ipir pair<int, int>
#define ivec vector<int>
#define clr(t) memset(t, 0, sizeof t)
#define pse(t, v) memset(t, v, sizeof t)
#define brl puts("")
#define file(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)
const int INF = 0x3f3f3f3f;
typedef long long LL;
typedef double DB;
inline void pc(char c) { putchar(c); }
template<class T> inline T gcd(T a, T b) { return b == 0 ? a : gcd(b, a % b); }
template<class T> inline void W(T p) { if(p < 0) pc('-'), p = -p; if(p / 10 != 0) W(p / 10); pc('0' + p % 10); } // warning!! slower than printf
template<class T> inline void Wn(T p) { W(p), brl; } template<class T> inline void W(T a, T b) { W(a), pc(' '), W(b); }
template<class T> inline void Wn(T a, T b) { W(a), pc(' '), Wn(b); }
template<class T> inline void W(T a, T b, T c) { W(a), pc(' '), W(b), pc(' '), W(c); }
inline char gchar() { char ret = getchar(); for(; ret == '\n' || ret == '\r' || ret == ' '; ret = getchar()); return ret; }
template<class T> inline void fr(T&ret) { char c = ' '; int flag = 1; for(c = getchar(); c != '-' && !('0' <= c && c <= '9'); c = getchar());
if(c == '-') flag = -1, ret = 0; else ret = c - '0'; for(c = getchar(); '0' <= c && c <= '9'; c = getchar()) ret = ret * 10 + c - '0';
ret = ret * flag;
}
inline int fr() { int x; fr(x); return x; }
template<class T> inline void fr(T&a, T&b) { fr(a), fr(b); } template<class T> inline void fr(T&a, T&b, T&c) { fr(a), fr(b), fr(c); }
template<class T> inline T fast_pow(T base, T index, T mod = 2147483647, T ret = 1) {
for(; index; index >>= 1, base = base * base % mod) if(index & 1) ret = ret * base % mod;
return ret;
}
const int maxv = 100, maxe = 100;
struct Edge {
int edge, head[maxv], to[maxe], next[maxe];
Edge() { edge = 0; memset(head, -1, sizeof head); }
void addedge(int u, int v) {
to[edge] = v, next[edge] = head[u];
head[u] = edge++;
}
};
};
using namespace my_useful_tools;
int r, c, m;
class matrixCase {
static const int maxSize = 200 + 10;
static const int maxColor = 1000 + 10;
int sum[maxSize][maxSize][maxColor];
public:
void solve() {
for(int i = 1; i <= r; ++i)
for(int j = 1; j <= c; ++j)
++sum[i][j][fr()];
for(int i = 1; i <= r; ++i)
for(int j = 1; j <= c; ++j)
for(int k = 1000; 0 < k; --k)
sum[i][j][k] += sum[i - 1][j][k] + sum[i][j - 1][k] - sum[i - 1][j - 1][k];
while(m--) {
int x, y, a, b, need, use = 0;
fr(x, y), fr(a, b, need);
for(int i = 1000; 0 < i; --i) {
int val = sum[a][b][i] + sum[x - 1][y - 1][i] - sum[a][y - 1][i] - sum[x - 1][b][i];
if(val * i < need) {
need -= val * i, use += val;
} else {
use += (need - 1) / i + 1;
printf("%d\n", use);
need = 0;
break;
}
}
if(need) puts("Poor QLW");
}
}
};
int pos[500000 + 100];
class lineCase {
static const int maxSize = 500000 + 100;
static const int maxQuery = 20000 + 100;
public:
int sum[maxSize], ans[maxQuery], a[maxSize];
struct QueryInfo {
int l, r, need, id;
void read(int _id) {
fr(id, l), fr(id, r, need), id = _id;
}
bool operator < (const QueryInfo&rhs) const {
return pos[l] < pos[rhs.l] || (pos[l] == pos[rhs.l] && r < rhs.r);
}
} q[maxQuery];
void solve() {
int blockSize = (int)sqrt((DB)c + 0.5);
rep(i, 1, m) pos[i] = (i - 1) / blockSize + 1;
rep(i, 1, c) fr(a[i]);
for(int i = 1; i <= m; ++i) q[i].read(i);
sort(q + 1, q + m + 1);
int l = 1, r = 0;
clr(sum);
for(int i = 1; i <= m; ++i) {
while(l < q[i].l) --sum[a[l++]];
while(r < q[i].r) ++sum[a[++r]];
while(q[i].l < l) ++sum[a[--l]];
while(q[i].r < r) --sum[a[r--]];
int use = 0;
for(int k = 1000; 0 < k && q[i].need; --k) {
if(sum[k] * k < q[i].need) q[i].need -= sum[k] * k, use += sum[k];
else {
use += (q[i].need - 1) / k + 1;
q[i].need = 0;
}
}
// printf("%d\n", use);
ans[q[i].id] = (q[i].need == 0) ? use : -1;
}
rep(i, 1, m) {
if(ans[i] == -1) {
puts("Poor QLW");
} else {
printf("%d\n", ans[i]);
}
}
}
};
int main() {
fr(r, c, m);
if(r != 1) {
(new matrixCase)->solve();
} else {
(new lineCase)->solve();
}
return 0;
}
1926: [Sdoi2010]粟粟的书架的更多相关文章
- bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1926 题面; 1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Se ...
- Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ...
- 【刷题】BZOJ 1926 [Sdoi2010]粟粟的书架
Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R行C 列的巨型书架,书 ...
- bzoj1926[Sdoi2010]粟粟的书架 二分 主席树
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MBSubmit: 1064 Solved: 421[Submit][Stat ...
- BZOJ1926:[SDOI2010]粟粟的书架——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1926 https://www.luogu.org/problemnew/show/P2468 幸福幼 ...
- [bzoj1926][Sdoi2010]粟粟的书架_二分_主席树
粟粟的书架 bzoj-1926 Sdoi-2010 题目大意:题目链接 注释:略 想法:分成两个题 前面的我们可以二分,直接二分出来检验即可. 对于R=1的,相当一个数列,我们在上面建立主席树. 然后 ...
- [SDOI2010]粟粟的书架 [主席树]
[SDOI2010]粟粟的书架 考虑暴力怎么做 显然是提取出来 (x2-x1+1)*(y2-y1+1) 个数字拿出来 然后从大到小排序 然后就可以按次取数了- 然而接下来看数据范围 \(50\%\ r ...
- [BZOJ1926][SDOI2010]粟粟的书架
BZOJ Luogu Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R ...
- BZOJ1926[Sdoi2010]粟粟的书架——二分答案+主席树
题目描述 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Co rmen 的文章.粟粟家中有一个 R行C 列的巨型书架,书架的每一个位 ...
- 【BZOJ1926】【SDOI2010】粟粟的书架 [主席树]
粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB[Submit][Status][Discuss] Description 幸福幼儿园 B29 班的粟粟是一 ...
随机推荐
- python基础之字符串格式化
python中字符串格式化有两种,一种是%,另一种是str中的format()功能. % 列举格式符 %s 字符串 %c 单个字符 %b 二进制整数 %d 十进制整数 %i ...
- python的函数介绍 位置参数 关键字参数 默认参数 参数组 *args **kwargs
1.数学意义的函数与python中的函数 数学意义的函数 y = 2*3+1 x =3 y =7 x是自变量,y是因变量 2.python中定义函数的方法 一个函数往往都是为了完成一个特定的功能而存在 ...
- K8S调度之节点亲和性
Node Affinity Affinity 翻译成中文是"亲和性",它对应的是 Anti-Affinity,我们翻译成"互斥".这两个词比较形象,可以把 po ...
- Ansible3: ansible.cfg配置说明
常用配置 Ansible默认安装好后有一个配置文件/etc/ansible/ansible.cfg,该配置文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码.是否开启sudo认证. ...
- 《剑指offer》面试题28:字符串的排列(牛客网版本) java
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输 ...
- IOS数组的排序和筛选
1.排序 [self.tableItems sortUsingComparator:^NSComparisonResult(GPBTeacherBrief* obj1, GPBTeacherBrief ...
- 洛谷P1456 Monkey King
https://www.luogu.org/problemnew/show/1456 #include<cstdio> #include<iostream> #include& ...
- 掌握Markdown
翻译自 https://guides.github.com/features/mastering-markdown/ 转载请注明链接 掌握Markdown Markdown是Github平台上一种轻量 ...
- [转载]strtok函数和strtok_r函数
1.一个应用实例 网络上一个比较经典的例子是将字符串切分,存入结构体中.如,现有结构体 typedef struct person{ char name[25]; char sex[1 ...
- debian旧日笔记
18:45 2007-10-7 序 图形界面较好的Linux操作系统有三个主要的发行版本:RedHat, Debian, SuSE.自RedHat9后,RedHat以Fedora为名发行新的版本.仍然 ...