HDU 4288 Coder

来源:互联网 发布:r数据可视化手册 编辑:程序博客网 时间:2024/05/29 14:05

Coder

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2778    Accepted Submission(s): 1104


Problem Description
  In mathematics and computer science, an algorithm describes a set of procedures or instructions that define a procedure. The term has become increasing popular since the advent of cheap and reliable computers. Many companies now employ a single coder to write an algorithm that will replace many other employees. An added benefit to the employer is that the coder will also become redundant once their work is done. 1
  You are now the signle coder, and have been assigned a new task writing code, since your boss would like to replace many other employees (and you when you become redundant once your task is complete).
Your code should be able to complete a task to replace these employees who do nothing all day but eating: make the digest sum.
  By saying “digest sum” we study some properties of data. For the sake of simplicity, our data is a set of integers. Your code should give response to following operations:
  1. add x – add the element x to the set;
  2. del x – remove the element x from the set;
  3. sum – find the digest sum of the set. The digest sum should be understood by

  where the set S is written as {a1, a2, ... , ak} satisfying a1 < a2 < a3 < ... < ak 
  Can you complete this task (and be then fired)?
------------------------------------------------------------------------------
1 See http://uncyclopedia.wikia.com/wiki/Algorithm
 

Input
  There’re several test cases.
  In each test case, the first line contains one integer N ( 1 <= N <= 105 ), the number of operations to process.
  Then following is n lines, each one containing one of three operations: “add x” or “del x” or “sum”.
  You may assume that 1 <= x <= 109.
  Please see the sample for detailed format.
  For any “add x” it is guaranteed that x is not currently in the set just before this operation.
  For any “del x” it is guaranteed that x must currently be in the set just before this operation.
  Please process until EOF (End Of File).
 

Output
  For each operation “sum” please print one line containing exactly one integer denoting the digest sum of the current set. Print 0 if the set is empty.
 

Sample Input
9add 1add 2add 3add 4add 5sumadd 6del 3sum6add 1add 3add 5add 7add 9sum
 

Sample Output
345
Hint
C++ maybe run faster than G++ in this problem.
解题思路:建5棵线段树,分别保存区间内相对顺序模5的位置的数字之和,pushup的时候左子树的相对父节点位置不变,右子树的相对位置为((i-tree[[rt<<1].cnt])%5+5)%5,cnt是区间内的数的个数,最后结果是tree[1].sum[3]
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <string>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define Maxn 100005#define LL long long using namespace std;struct{int cnt;LL sum[5];}tree[Maxn<<2];void push_up(int rt){for(int i=0;i<5;i++)tree[rt].sum[i]=tree[rt<<1].sum[i]+tree[rt<<1|1].sum[((i-tree[rt<<1].cnt)%5+5)%5];}void build(int l,int r,int rt){tree[rt].cnt=0;memset(tree[rt].sum,0,sizeof(tree[rt].sum));if(l==r)    return ;int m=(l+r)>>1;build(lson);build(rson);push_up(rt);}void update(int pos,int x,int k,int l,int r,int rt){tree[rt].cnt+=k;if(l==r){tree[rt].sum[1]+=k*x;return ;}int m=(l+r)>>1;if(pos<=m)update(pos,x,k,lson);elseupdate(pos,x,k,rson);push_up(rt);}int main(){char op[Maxn][5];int x[Maxn],n,num[Maxn],j,p;freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);while(~scanf("%d",&n)){j=0;for(int i=0;i<n;i++){scanf("%s",op[i]);if(op[i][0]!='s'){scanf("%d",&x[i]);if(op[i][0]=='a')num[j++]=x[i];}}sort(num,num+j);if(j==0)memset(tree[1].sum,0,sizeof(tree[1].sum));elsebuild(1,j,1);for(int i=0;i<n;i++){switch(op[i][0]){case 'a':p=lower_bound(num,num+j,x[i])-num+1;update(p,x[i],1,1,j,1);break;case 'd':p=lower_bound(num,num+j,x[i])-num+1;update(p,x[i],-1,1,j,1);break;case 's':printf("%I64d\n",tree[1].sum[3]);break;}}}return 0;}


 

Source
2012 ACM/ICPC Asia Regional Chengdu Online
 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 针织衣服线跑了怎么办 老板跟老板娘吵架我应该怎么办 偷看老板娘洗澡被发现怎么办? 幽浮2人挂了怎么办 蜻蜓fm业务扣费怎么办 退出键退不到主页面怎么办 3d纯英文版怎么办 3d单位设置错了怎么办 翼龙贷款不还款怎么办 lol视角变低了怎么办 王者荣耀体验卡太多怎么办 文件打开后超出电脑屏幕怎么办 2400g玩lol跳fps怎么办 手机吃鸡延迟长怎么办 三星s8发热卡顿怎么办 逆水寒修为不够怎么办 诛仙摆摊金币被扣怎么办 诛仙手游宠物亲密度满了怎么办 诛仙包裹满了怎么办 感觉自己心理有问题 怎么办 刺激战场手机配置低怎么办 国土防线2没反应怎么办 镜之边缘迷路了怎么办? 陌陌直播不清晰怎么办 夏利n5 1.0费油怎么办 gg修改器是病毒怎么办 传送门骑士联机读条慢怎么办 被打成轻伤派出所不抓人怎么办 有人上门找事怎么办算正当防卫吗 win10 电脑账户被停用怎么办 电脑一键还原后黑屏怎么办 win一键还原后黑屏怎么办 打架对方群殴我我怎么办 杀了人没钱赔怎么办 团伙打架被对方所刀捅伤怎么办 过失致人重伤赔偿不起怎么办 被别人打了派出所不管怎么办 先动手的被打伤怎么办 自为伤了人怎么办? 孩子被打不敢还手怎么办 小孩给电打了怎么办