码迷,mamicode.com
首页 > 其他好文 > 详细

HDU4288-STL模拟

时间:2015-09-07 00:29:14      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

给你插入,删除的操作,维护一个降序排列的表,查询所有下标模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);
            }
        }
    }

        
}

 

HDU4288-STL模拟

标签:

原文地址:http://www.cnblogs.com/helica/p/4787774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!