SGU 548

来源:互联网 发布:台湾衰落知乎 编辑:程序博客网 时间:2024/05/19 15:20
#include <iostream>
#include <string.h>
#include <queue>
#include <algorithm>
#include <stdio.h>




using namespace std;


struct node
{
    char lev;
    int num;
    int th;
   bool operator < (const node &other) const
     {
        return num > other.num;
     }
}p[200000 + 10];
int arrery[200000 + 10];




int main()
{
    int n;
    while(scanf("%d",&n) != EOF)
    {


        priority_queue<node> que;
        int sum = 0;
        memset(arrery ,0 ,sizeof(arrery));


        for( int i = 2; i<= n; i++)
         {
             cin>>p[i].lev>>p[i].num;
             p[i].th = i;
         }
        for( int i = 2; i<n; i++)
        {
            if(p[i].lev == 'd')
              {
                  que.push(p[i]);
                  sum += p[i].num;
              }
            else if(p[i].lev == 'p')
            {
                while(p[i].num <= que.size())
                {
                    node now = que.top();
                    sum -= now.num;
                    que.pop();
                }
            }
        }


        if(p[n].num > que.size())
          printf("-1\n");
        else
        {
            int cnt = 0;
            while(!que.empty())
            {
                arrery[cnt++] = que.top().th;
                que.pop();
            }
            sort(arrery,arrery + cnt);
          printf("%d\n%d\n",sum,cnt);


          for( int i = 0; i < cnt ; i++)
            printf("%d%c",arrery[i], (i == cnt - 1 ? '\n' : ' '));
        }


    }
}
0 0
原创粉丝点击