昨天晚上zyf神犇问我的题,虽然我太弱参加不了APIO但也做一做吧。

用小数据拍了无数次总是查不出错来,交上去就WA,后来用国内数据测发现是主席树上区间相减的值没有用long long存,小数据真是没用啊QuQ

手残不加long long毁一生

交上去还是WA,最后发现没有把windows下的I64d改成linux下的lld==

因为这个贡献了两次Wrong Answer,,,好像第一次还爆内存了?比赛时这么手残就得滚粗了QAQ

#include<cstdio>
#include<cstring>
#include<algorithm>
#define read(x) x=getint()
using namespace std;
const int N = 100003;
int getint() {
int k = 0, fh = 1; char c = getchar();
for(; c < '0' || c > '9'; c = getchar())
if (c == '-') fh = -1;
for(; c >= '0' && c <= '9'; c = getchar())
k = k * 10 + c - '0';
return k * fh;
}
struct node1 {
int b, c, l, id;
} Q[N];
struct node2 {
int l, r, s;
long long sc;
}T[N * 30];
int S[N], n, m, point[N], nxt[N], to[N], cnt = 0, rt = 0, L[N], R[N], H[N];
int root[N], CL[N];
void ins(int x, int y) {nxt[++cnt] = point[x]; to[cnt] = y; point[x] = cnt;}
void dfs(int x) {
S[++cnt] = x;
L[x] = cnt;
for(int i = point[x]; i; i = nxt[i]) dfs(to[i]);
R[x] = cnt;
}
bool cmp(node1 X, node1 Y) {return X.c < Y.c;}
void update(int l, int r, int &pos, int key) {
T[++cnt] = T[pos]; pos = cnt; ++T[pos].s; T[pos].sc += Q[key].c;
if (l == r) return;
int mid = (l + r) >> 1;
if (key <= mid) update(l, mid, T[pos].l, key);
else update(mid + 1, r, T[pos].r, key);
}
long long Query(int l, int r, int x, int y, int key) {
if (l == r) {
if (T[y].sc - T[x].sc <= key) return T[y].s - T[x].s;
else return key / Q[l].c;
}
int mid = (l + r) >> 1; long long su = T[T[y].l].sc - T[T[x].l].sc;
if (su >= key) return Query(l, mid, T[x].l, T[y].l, key);
else return T[T[y].l].s - T[T[x].l].s + Query(mid + 1, r, T[x].r, T[y].r, key - su);
}
int main() {
read(n); read(m);
for(int i = 1; i <= n; ++i)
read(Q[i].b), read(Q[i].c), read(Q[i].l), Q[i].id = i, CL[i] = Q[i].l;
for(int i = 1; i <= n; ++i)
if (Q[i].b == 0) rt = i;
else ins(Q[i].b, i);
cnt = 0;
dfs(rt);
sort(Q + 1, Q + n + 1, cmp);
for(int i = 1; i <= n; ++i)
H[Q[i].id] = i;
cnt = 0;
// for(int i = 1; i <= n; ++i) printf("%d %d\n", L[i], R[i]);
// for(int i = 1; i <= n; ++i) printf("!! %d\n", H[i]);
// for(int i = 1; i <= n; ++i) printf("!! %d\n", Q[H[i]].c);
for(int i = 1; i <= n; ++i) {
root[i] = root[i - 1];
update(1, n, root[i], H[S[i]]);
// printf("HHH %d\n", S[i]);
// printf("!!! %d\n", H[S[i]]);
}
// for(int i = 1; i <= n ;++i) printf("%I64d ", T[root[i]].sc); puts("");
long long ans = 0;
for(int i = 1; i <= n; ++i)
ans = max(ans, CL[i] * Query(1, n, root[L[i] - 1], root[R[i]], m));
printf("%lld\n", ans);
// for(int i = 1; i <= n; ++i) printf("%d %d\n", L[i], R[i]);
return 0;
}

没有删掉愚蠢的调试信息,,,

【BZOJ 2809】【APIO 2012】dispatching的更多相关文章

  1. 「BZOJ 2809」「APIO 2012」Dispatching「启发式合并」

    题意 给定一个\(1\)为根的树,每个点有\(c,w\)两个属性,你需要从某个点\(u\)子树里选择\(k\)个点,满足选出来的点\(\sum_{i=1}^k w(i)\leq m\),最大化\(k\ ...

  2. 【BZOJ 2809】2809: [Apio2012]dispatching (左偏树)

    2809: [Apio2012]dispatching Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Maste ...

  3. 【BZOJ 2809】 [Apio2012]dispatching

    Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级. ...

  4. 【BZOJ 2809 dispatching】

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 4393  Solved: 2246[Submit][Status][Discuss] Descript ...

  5. 【BZOJ】【2809】【APIO2012】派遣dispatching

    贪心/可并堆 跪了……我这么弱果然还是应该回家种红薯去…… 考虑选人的时候,每个人对答案的贡献其实是一样的,都是1,那么我们就贪心地去选花钱少的就好啦~ 具体的做法:倒着枚举(因为有b[i]<i ...

  6. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  7. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  8. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  9. 【BZOJ】【2084】【POI2010】Antisymmetry

    Manacher算法 啊……Manacher修改一下就好啦~蛮水的…… Manacher原本是找首尾相同的子串,即回文串,我们这里是要找对应位置不同的“反回文串”(反对称?233) 长度为奇数的肯定不 ...

随机推荐

  1. 【温故而知新-Javascript】使用Web存储

    Web存储允许我们在浏览器里保存简单的键/值数据.Web存储和cookie很相似,但它有着更好的实现方式,能保存的数据量也很大.这两种类型共享相同的机制,但是被保存数据的可见性和寿命存在区别. PS: ...

  2. C#迭代重载等

    迭代器 迭代器是作为一个容器,将要遍历的数据放入,通过统一的接口返回相同类型的值 迭代器代码使用 yield return 语句依次返回每个元素.yield break 将终止迭代 类中实现多个迭代器 ...

  3. ANE接入平台心得记录(安卓)

    开发环境:FlashBuilder4.7 AIR13.0 Eclipse 由于我懒得陪安卓的开发环境所以我下载了包含安卓SDK Manager的Eclipse,其实直接用FlashBuilder开发A ...

  4. 多个mysql解决方法

    有的时候工作需要之类的,需要多个mysql数据库,而默认开启的服务为c盘windows里的my.ini 1.设置好要用的my.ini2.关闭当前的mysql数据库服务3.将my.ini拷贝到C:\WI ...

  5. java之多线程之一/序列化和反序列化

    线程安全: 如何自己手动创建一个线程 答:继承Thread类或实现Runnable接口 public class Mythread extends Thread{ @Override public v ...

  6. java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述

    在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...

  7. 使用Access-Control-Allow-Origin解决跨域

    什么是跨域 当两个域具有相同的协议(如http), 相同的端口(如80),相同的host(如www.google.com),那么我们就可以认为它们是相同的域(协议,域名,端口都必须相同). 跨域就指着 ...

  8. cookie操作(jquery的cookie插件源码)

    cookie : function (key, value, options) { var days, time, result, decode; // A key and value were gi ...

  9. sublime自定义快键键不行,

    其实sublime自身就有格式化命令,就不再安装插件,位置在[Edit]->[Line]->[Reindent]但这个默认的命令没有快捷键,就重新定义了一下,想用习惯了的eclipse快捷 ...

  10. FSL - DualRegression

    Source:http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/DualRegression Research Overview A common need for anal ...