牛客练习赛50 C

一开始写了暴力的写法,先是一直wa,然后就开始T,wa在于multiset用成了set,se.rbegin()到se.rend()我的迭代器一直在++而不是在–。最后一直卡在我的暴力算法中,解法:维持一个i大小的multiset,最多有n次的变化,然后一个sum和就可以了,我一直卡在了sum和的那里,我每次都暴力求sum和,于是超时。上三角式的结构,复杂度为上三角的总和。

#include
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    vector ve[n+10];
    for(int i=1;i<=n;i++)
    {
        int v,s;
        scanf("%d%d",&v,&s);
        ve[s].push_back(v);
    }
    long long ans=0;
    multiset se;
    int selen=0;
    long long sum=0;
    for(int i=n;i>=1;i--)
    {
       if(selen>i)
       {
           auto w=se.begin();
           for(auto p=se.begin();p!=w+selen-i;p++)
           {
               sum-=*p;
               se.erase(p);
           }
       }
       for(auto x:ve[i])
       {
           if(selen

你可能感兴趣的:(思维题和stl)