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); } } } }