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[],len; int main()
{
while(~scanf("%d",&N))
{
char op[];
int it,len = ,i;
for(int k=;k<N;k++)
{
scanf("%s",op);
if(op[] == 'a'){
scanf("%d",&it);
for(i = len;i > ;i--)
{
if(save[i-] > it)
save[i] = save[i-];
else
break;
}
save[i] = it;
len++;
}
else if(op[] == 'd'){
scanf("%d",&it);
for(i = ;i < len;i++)
{
if(save[i] == it)
break;
}
for(;i < len;i++) save[i] = save[i+];
len--;
}
else
{
long long ans = ;
for(int i = ;i < len;i+=)
{
ans += save[i];
}
printf("%lld\n",ans);
}
}
} }
上一篇:Confluence 6 启用主题评论


下一篇:手动编译安装Libvirt之后利用systemctl管理libvirtd服务