luogu P2073 送花

二次联通门 : luogu P2073 送花

/*
    luogu P2073 送花 

    ...
    机房里有写平衡树的
    有些线段树的

    大家都这么厉害

    那我就写个更厉害的吧..

    set大法好!!
    233333 

    注意一下set的begin()与end()是左闭右开的..被坑了一次
*/
#include <cstdio>
#include <set>

void read (int &now)
{
    now = 0;
    char word = getchar ();
    bool flag = false;
    while (word > ‘9‘ || word < ‘0‘)
    {
        if (word == ‘-‘)
            flag = true;
        word = getchar ();
    }
    while (word >= ‘0‘ && word <= ‘9‘)
    {
        now = now * 10 + word - ‘0‘;
        word = getchar ();
    }
    if (flag)
        now = -now;
}

struct Flower_Date
{
    int Value;
    int Cost;

    bool operator < (const Flower_Date &a) const
    {
        return a.Cost < this->Cost;
    }
};

std :: set <Flower_Date> Make;

Flower_Date now;

int main (int argc, char *argv[])
{
    int Answer = 0, __Answer = 0;
    for (int type, x, y; ; )
    {
        read (type);
        if (type == -1)
        {
            for (std :: set <Flower_Date> :: iterator i = Make.begin (); i != Make.end (); i++)
            {
                Answer += (*i).Value;
                __Answer += (*i).Cost;
            }
            printf ("%d %d", Answer, __Answer);
            return 0;
        }
        if (type == 1)
        {
            read (now.Value);
            read (now.Cost);
            Make.insert (now);
        }
        else if (type == 2 && !Make.empty ())
        {
            now = *Make.begin ();
            Make.erase (now);
        }
        else if (type == 3 && !Make.empty ())
        {
            std :: set <Flower_Date> :: iterator Iter = Make.end ();
            Iter--;
            now = *Iter;
            Make.erase (now);
        }
    }
    return 0;
}
时间: 2024-10-04 10:35:57

luogu P2073 送花的相关文章

【题解】Luogu P2073 送花

原题传送门 这题需要用到Splay 我们用一棵splay维护金钱 考虑c<=1000000 我们珂以把每种价格现在对应的美丽值存在一个a数组中 这样讲有珂能不太清楚qaq,还是对着操作一个一个讲 操作一: 先在这棵splay中查找是否有这种花的金钱 如果有,直接跳过 如果没有,a[c]=m,把金钱为c的花的美丽值存下,把两个所求答案更新,把c插入平衡树 操作2,3: 执行所有操作之前先把inf,-inf插入平衡树 删除最小就是删除-inf的后继,删除最大就是删除inf的前驱 但还要加上特判,在后

【洛谷】P2073 送花 [2017年6月计划 线段树01]

P2073 送花 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花束,他不断地向里面添加花.他有以下几种操作: 操作 含义 1 W C 添加一朵美丽值为W,价格为C的花. 3 小明觉得当前花束中最便宜的一朵花太廉价,不适合送给小红,所以删除最便宜的一朵花. 2 小明觉得当前花束中最贵的一朵花太贵,他心疼自己的钱,所以删除最贵的一朵花. -1 完成添加与删除,开始包

洛谷 P2073 送花

错误记录:21,32,41行goto写成continue导致没有读入x就continue了导致无限等待输入导致TLE 1 #include<cstdio> 2 #include<queue> 3 #include<set> 4 using namespace std; 5 typedef pair<int,int> P; 6 priority_queue<P> q1; 7 priority_queue<P,vector<P>,g

[Luogu 2073] 送花

<题目链接> 很容易想到的平衡树,加个维护区间和. 只需要插入和删除操作即可. kth其实都不用的,最小和最大可以从根节点log n一直向左/一直向右跑到叶子节点而求得. 记得每插入完一个点一定要更新区间和!!更新区间和!!更新区间和!! 我就因为没更新,导致出来答案都是随机的,有时候对,有时候不对. 关于平衡树不多说啦,关于平衡树(Treap)的教程请看这里. 上代码. #include <cstdio> #include <cstdlib> #include <

[Luogu] 送花

https://www.luogu.org/problemnew/show/2073 自己yy,明显错 #include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; const int oo = 999999999; #define gc getchar() struct Node{ int w, b, bef; }flower[N]; int Ans1, Ans2, opt, W, B, Max, Min; map

luogu P3799 妖梦拼木棒

二次联通门 : luogu P3799 妖梦拼木棒 /* luogu P3799 妖梦拼木棒 用一个桶存下所有的木棒 美剧两根短的木棒长度 后随便乘一乘就 好了.. */ #include <algorithm> #include <cstdio> #define Mod 1000000007 #define Max 5000 void read (int &now) { now = 0; register char word = getchar (); while (wo

[luogu P1967][NOIp2013]P1967 货车运输

题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物. 输入输出格式 输入格式: 输入文件名为 truck.in. 输入文件第一行有两个用一个空格隔开的整数 n,m,表示 A 国有 n 座城市和 m 条道 路. 接下来 m 行每行 3 个整数 x. y. z,每两个整数之间用一个空格隔开,表示从 x 号城市到 y 号城市有一条限重为 z

luogu 3126 回文的路径

https://www.luogu.org/problem/show?pid=3126 考虑dp,从两头走到中间. f[i][j][k][l]表示从左上角走到(i,j),从右下角走到(k,l),路径长度相等,所经过路径相同的方案数. 方程不再赘述. 考虑步数要相同,所以只要枚举步数和行就好. f[i][j][k]表示第一个点在第j行,第2个点在第k行,走i步的方案数. 所以得出方程f[i][j][k]=(f[i-1][j-1][k]+f[i-1][j][k+1]+f[i-1][j-1][k+1]

luogu P2018 消息传递

二次联通门 : luogu P2018 消息传递 /* luogu P2018 消息传递 树形dp 原来用优先队列做了一下, T了俩点 MMP 去看正解.. 复杂度一样好不好.. 每次到达一个点,记录其子树中所有的dp值 优先向大的一边转移 */ #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #define INF 1e8 const int BUF