HDU4288-STL模拟

给你插入,删除的操作,维护一个降序排列的表,查询所有下标模5等于3的元素和。

2012年成都网络赛的一道签到题。但是还是搜了题解才做出来了,意志不坚定啊。。。

 

这道题给10s的时间,做法多种多样。

最暴力的方法是维护一个数组,插入删除靠移动元素实现,巧妙的姿势可以用8点多秒通过。注意G++过不了但C++可以过。

还可以用vector+lower_bound 也能过

我还在网上看到了线段树的做法,然而并没有看懂。

 

#include <algorithm>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <cmath>
#include <set>
#include <map>

using namespace std;

int N,M,T,save[100010],len;

int main()
{
    while(~scanf("%d",&N))
    {
        char op[5];
        int it,len = 0,i;
        for(int k=0;k<N;k++)
        {
            scanf("%s",op);
            if(op[0] == 'a'){
                scanf("%d",&it);
                for(i = len;i > 0;i--)
                {
                    if(save[i-1] > it)
                        save[i] = save[i-1];
                    else 
                        break;
                }
                save[i] = it;
                len++;
            }
            else if(op[0] == 'd'){
                scanf("%d",&it);
                for(i = 0;i < len;i++)
                {
                    if(save[i] == it)
                        break;
                }
                for(;i < len;i++) save[i] = save[i+1];
                len--;
            }
            else
            {
                long long ans = 0;
                for(int i = 2;i < len;i+=5)
                {
                    ans += save[i];
                }
                printf("%lld\n",ans);
            }
        }
    }

        
}

 

posted @ 2015-09-07 00:04  Helica  阅读(550)  评论(1编辑  收藏  举报