洛谷 P2073 送花

题目背景

小明准备给小红送一束花,以表达他对小红的爱意。他在花店看中了一些花,准备用它们包成花束。

题目描述

这些花都很漂亮,每朵花有一个美丽值W,价格为C。

小明一开始有一个空的花束,他不断地向里面添加花。他有以下几种操作:

操作 含义

1 W C 添加一朵美丽值为W,价格为C的花。

3 小明觉得当前花束中最便宜的一朵花太廉价,不适合送给小红,所以删除最便宜的一朵花。

2 小明觉得当前花束中最贵的一朵花太贵,他心疼自己的钱,所以删除最贵的一朵花。

-1 完成添加与删除,开始包装花束

若删除操作时没有花,则跳过删除操作。

如果加入的花朵价格已经与花束中已有花朵价格重复,则这一朵花不能加入花束。

请你帮小明写一个程序,计算出开始包装花束时,花束中所有花的美丽值的总和,以及小明需要为花束付出的总价格。

输入输出格式

输入格式:

 

若干行,每行一个操作,以-1结束。

 

输出格式:

 

一行,两个空格隔开的正整数表示开始包装花束时,花束中所有花的美丽值的总和。以及小明需要为花束付出的总价格。

 

输入输出样例

输入样例#1:
1 1 1
1 2 5
2
1 3 3
3
1 5 2
-1
输出样例#1:
8 5

说明

对于20%数据,操作数<=100,1<=W,C<=1000。

对于全部数据,操作数<=100000,1<=W,C<=1000000。

【题目解释】

    正解是线段树来搞

    但是数据比较水,暴力也能卡一卡,下面是O(n) 的暴力,这题是对不起线段树的大名了(笑抽)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
int cnt=0;
int x;
bool flag=0;
bool xx[1000001]={0};
using namespace std;
struct node{
    int w,c;
}h[100010];int cmp2(const node a,const node b)
{
    return a.c>b.c;
}
int cmp1(const node a,const node b)//cong xiao dao da
{
    return a.c<b.c;
}
void ex()
{
    sort(h+1,h+cnt+1,cmp1);
    xx[h[cnt].c]=0;
    cnt--;
}
void cheap()
{
    sort(h+1,h+cnt+1,cmp2);
    xx[h[cnt].c]=0;
    cnt--;
}
int main()
{
    scanf("%d",&x);
    while(x!=-1)
    {
        if(x==1)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            if(cnt==0)
            {
                xx[b]=1;
                cnt++;
                h[cnt].w=a;
                h[cnt].c=b;
            }
            else
            {
                //sort(h+1,h+cnt+1,cmp1);
                if(xx[b]==0)
                    cnt++,
                    xx[b]=1,
                    h[cnt].w=a,
                    h[cnt].c=b;
            }
        }
        if(x==2)
          if(cnt>0)
            ex();
        if(x==3)
          if(cnt>0)
            cheap();
        scanf("%d",&x);
    }
    int ans1=0,ans2=0;
    for(int i=1;i<=cnt;i++)
        ans1+=h[i].w,
        ans2+=h[i].c;
    printf("%d %d",ans1,ans2);
    return 0;
}

 

posted @ 2016-08-22 19:51  [lemon]  阅读(180)  评论(0编辑  收藏  举报
……