[CTSC 2018] 混合果汁
[题目链接]
https://www.lydsy.com/JudgeOnline/problem.php?id=5343
[算法]
对于每组询问 , 首先二分答案
显然 , 最优策略为优先选择价格低的
建立可持久化线段树 , 简单维护即可
时间复杂度 : O(NlogN ^ 2)
[代码]
#include<bits/stdc++.h>
using namespace std;
#define N 100010
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull; struct info
{
int d , p , l;
} a[N]; int n , m , len;
int b[N] , rt[N]; struct Presitent_Segment_Tree
{
int sz;
Presitent_Segment_Tree()
{
sz = ;
}
struct node
{
int lc , rc;
ll cnt , sum;
} a[N * ];
inline void build(int &now , int l , int r)
{
now = ++sz;
if (l == r) return;
int mid = (l + r) >> ;
build(a[now].lc , l , mid);
build(a[now].rc , mid + , r);
}
inline void modify(int &now , int old , int l , int r , int x , int y)
{
now = ++sz;
a[now].lc = a[old].lc , a[now].rc = a[old].rc;
a[now].cnt = a[old].cnt + y;
a[now].sum = a[old].sum + 1ll * b[x] * y;
if (l == r) return;
int mid = (l + r) >> ;
if (mid >= x) modify(a[now].lc , a[now].lc , l , mid , x , y);
else modify(a[now].rc , a[now].rc , mid + , r , x , y);
}
inline ll query(int now , int l , int r , ll x)
{
if (l == r)
return 1ll * b[l] * x;
int mid = (l + r) >> ;
if (a[a[now].lc].cnt >= x) return query(a[now].lc , l , mid , x);
else return a[a[now].lc].sum + query(a[now].rc , mid + , r , x - a[a[now].lc].cnt);
}
} PST; template <typename T> inline void chkmax(T &x,T y) { x = max(x,y); }
template <typename T> inline void chkmin(T &x,T y) { x = min(x,y); }
template <typename T> inline void read(T &x)
{
T f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
inline bool cmp(info a , info b)
{
return a.d > b.d;
} int main()
{ read(n); read(m);
for (int i = ; i <= n; i++)
{
read(a[i].d);
read(a[i].p);
read(a[i].l);
b[i] = a[i].p;
}
sort(b + , b + n + );
len = unique(b + , b + n + ) - b - ;
sort(a + , a + n + , cmp);
for (int i = ; i <= n; i++) a[i].p = lower_bound(b + , b + len + , a[i].p) - b;
PST.build(rt[] , , len);
for (int i = ; i <= n; i++) PST.modify(rt[i] , rt[i - ] , , len , a[i].p , a[i].l);
while (m--)
{
ll G , L;
read(G); read(L);
int l = , r = (int)1e5 , ans = ;
while (l <= r)
{
int mid = (l + r) >> ;
int ll = , rr = n , loc = ;
while (ll <= rr)
{
int md = (ll + rr) >> ;
if (a[md].d >= mid)
{
ll = md + ;
loc = md;
} else rr = md - ;
}
if (PST.a[rt[loc]].cnt >= L && PST.query(rt[loc] , , len , L) <= G)
{
l = mid + ;
ans = mid;
} else r = mid - ;
}
if (ans == ) puts("-1");
else printf("%d\n" , ans);
} return ; }
[CTSC 2018] 混合果汁的更多相关文章
- Solution -「CTSC 2018」「洛谷 P4602」混合果汁
\(\mathcal{Description}\) Link. \(n\) 种果汁,第 \(i\) 种美味度为 \(d_i\),每升价格 \(p_i\),一共 \(l_i\) 升.\(m\) ...
- CTSC 2018 游记
day0 李总提前一天放假,回家颓整理行李... 然而我... 早上:睡觉... 中午:睡觉... 晚上:睡觉去火车站... 吃了几把鸡,本来想带李总入坑,但他挥手拒绝然后被李总带进了炸金花的坑... ...
- WC 2018/CTSC 2018/APIO 2018 游记
(要写CTSC的时候才想起来没写WC2018,那就粗略回顾一下吧hhhhh) WC 2018(简略版): 大概和 一个宁夏和一个天津的大哥一个宿舍hhhh,字典序分宿舍真是奇妙. WC讲课真的不是人听 ...
- CTSC 2018酱油记
Day0 5.5 花了一上午的时间把codechef div2的前四题切了,又在zbq老司机的指导下把第五题切了 中午12:00 gryz电竞组从机房出发,临走的时候看到很多学长挺恋恋不舍的,毕竟可能 ...
- [CTSC 2018]假面
Description 题库链接 有 \(n\) 个敌方单位,初始第 \(i\) 个单位的血量为 \(m_i\) .共 \(Q\) 次操作,分两种: 对某一个单位以 \(p\) 的概率造成 \(1\) ...
- APIO 2018 游记
上接CTSC 2018 游记 day1 早上大概八九点起来洗了个澡跑到隔壁寝发现 tj 还在??? 原来昨天晚上听错名字了... 下午一起去 wfj 王府井玩,陪李总逛逛奢侈品店... 走了两三个小时 ...
- About me & 一些置顶的博文
About me 一只历史上最弱的 \(\text{hnoier}\) ... 身在 \(\text{hn}\) 弱校,除了在四大名校夹缝中生存,还要受到同校 \(\text{Julao}\) 的鄙视 ...
- NOIWC 2019 冬眠记【游记】
在我的blog查看:https://www.wjyyy.top/wc2019 Day -1 上火车了,but手机没电了. Day 0 中午1点左右到了广州东站.接站只有南站和机场有,于是坐了一个多小时 ...
- 2018 CTSC&APIO 游记
CTSC 居然是CTSC先考,弄得我有些意外. 5.6 早上5:30乘坐高铁来到北京,差不多下午了吧,具体几点忘记了,然后来到宾馆 试机也没有去,就直接在宾馆颓废了. 5.7 考试的第一天,6:3 ...
随机推荐
- 设计模式之状态模式(State)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- HDU 4514并查集判环+最长路
点击打开链接 题意:中文题...... 思路:先推断是否能成环,之前以为是有向图,就用了spfa推断,果断过不了自己出的例子,发现是无向图.并查集把,两个点有公共的父节点,那就是成环了,之后便是求最长 ...
- BZOJ 3727 PA2014 Final Zadanie 树形DP
题目大意:给定一棵树,令一个点到全部点的距离与点权的乘积之和为b[i].求每一个点的权值a[i] 首先假设给定a[i]我们能够非常轻松的求出b[i] 可是反过来怎么搞?高斯消元?30W? 考虑已知a[ ...
- nyoj 135 取石子(二) 【NIM】
取石子(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描写叙述 小王喜欢与同事玩一些小游戏.今天他们选择了玩取石子. 游戏规则例如以下:共同拥有N堆石子.已知每堆中石子 ...
- python(33)- 模块与包
一 模块 1 什么是模块? 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 2 为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前定义的函 ...
- Controller//控制器
#include<opencv2\core\core.hpp> #include<opencv2\imgproc\imgproc.hpp> #include<opencv ...
- 【Sprint3冲刺之前】项目可行性研究报告
TD校园手机助手软件可行性研究报告 1.引言 在信息化时代高速发展的今天,手机成了每个人的必备物品之一.随着科技的迅猛发展,人们已经不仅仅满足于用手机发短信,打电话,因此,android手机应运而生, ...
- python-tornado操作
Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效 ...
- VS + Qt5Designer + Anaconda环境配置
最近打算做一个模型训练工具,从来都不喜欢做UI的我,最终把目光放在了QtDesigner上.配环境的过程中在网上翻阅了不少博客,但大多是pycharm或者是VScode,使用VS的似乎不多.所以打算记 ...
- 例题6-16 单词 UVa10129
1.题目描写叙述:点击打开链接 2.解题思路:本题利用欧拉回路存在条件解决. 能够将全部的单词看做边,26个字母看做端点,那么本题事实上就是问是否存在一条路径,能够到达全部出现过的字符端点. 因为本题 ...