51nod1394 差和问题
我只会用线段树写。。。不喜欢树状数组。。其实跑的也不算慢?然后各种*的时候忘了longlong一直WA。。。药丸!
而且我不怎么会用map离散化。。。那么就sort+unique
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
#define ll long long
#define lson l,mid,x<<1
#define rson mid+1,r,x<<1|1
int read(){
int x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x;
}
const int nmax=1e5+5;
const int inf=0x7f7f7f7f;
ll sm[nmax<<3],col[nmax<<3];int a[nmax<<1],b[nmax<<1],ct[nmax<<1];
struct node{
int u,v;
};
node ns[nmax];
void update(int p,int ad,int bd,int l,int r,int x){
if(l==r) {
col[x]+=ad,sm[x]+=bd;return ;
}
int mid=(l+r)>>1;
p<=mid?update(p,ad,bd,lson):update(p,ad,bd,rson);
sm[x]=sm[x<<1]+sm[x<<1|1];col[x]=col[x<<1]+col[x<<1|1];
}
struct nd{
int u;ll v;
nd(int u,ll v):u(u),v(v){};
nd(){};
};
nd query(int tl,int tr,int l,int r,int x){
if(tl<=l&&tr>=r) return nd(col[x],sm[x]);
ll tm=0;int tc=0,mid=(l+r)>>1;nd o;
if(tl<=mid) o=query(tl,tr,lson),tc+=o.u,tm+=o.v;
if(tr>mid) o=query(tl,tr,rson),tc+=o.u,tm+=o.v;
return nd(tc,tm);
}
void print(int l,int r,int x){
printf("%d %d %d\n",l,r,sm[x]);
if(l==r) return ;
int mid=(l+r)>>1;
print(lson);print(rson);
}
int main(){
int n=read(),m=read(),u,v,d,cnt=n;
rep(i,1,n) a[i]=b[i]=read();
rep(i,1,m){
ns[i].u=read();if(ns[i].u!=3) ns[i].v=read(),a[++cnt]=b[cnt]=ns[i].v;
}
sort(b+1,b+cnt+1);
cnt=unique(b+1,b+cnt+1)-b-1;
rep(i,1,n) a[i]=lower_bound(b+1,b+cnt+1,a[i])-b;
rep(i,1,n) update(a[i],1,b[a[i]],1,cnt,1),ct[a[i]]++;
ll tm;nd o;
tm=0;
rep(j,2,cnt) {
o=query(1,j-1,1,cnt,1);
tm+=(ll)ct[j]*((ll)b[j]*o.u-o.v);
}
rep(i,1,m){
u=ns[i].u;
if(u==3) printf("%lld\n",tm);
else if(u==1){
v=lower_bound(b+1,b+cnt+1,ns[i].v)-b;
ct[v]++;update(v,1,ns[i].v,1,cnt,1);
if(v==1) o=nd(0,0);else o=query(1,v-1,1,cnt,1);
tm+=(ll)b[v]*o.u-o.v+(sm[1]-o.v-(ll)b[v]*ct[v])-(ll)(col[1]-o.u-ct[v])*b[v];
}else{
v=lower_bound(b+1,b+cnt+1,ns[i].v)-b;
if(!ct[v]) puts("-1");
else{
ct[v]--,update(v,-1,-ns[i].v,1,cnt,1);
if(v==1) o=nd(0,0);else o=query(1,v-1,1,cnt,1);
tm-=(ll)b[v]*o.u-o.v+(sm[1]-o.v-(ll)b[v]*ct[v])-(ll)(col[1]-o.u-ct[v])*b[v];
}
}
//printf("->_->\n");print(1,cnt,1);
}
return 0;
}
有一个多重集合S(即里面元素可以有重复),初始状态下有n个元素,对他进行如下操作:
1、向S里面添加一个值为v的元素。输入格式为1 v
2、向S里面删除一个值为v的元素。输入格式为2 v
3、询问S里面的元素两两之差绝对值之和。输入格式为3
对于样例,
操作3,|1-2|+|1-3|+|2-3|=4
操作1 4之后,集合中的数字为1 2 3 4
操作3,|1-2|+|1-3|+|2-3|+|1-4|+|2-4|+|3-4|=10
操作2 2之后,集合中的数字为1 3 4
操作3,|1-3|+|1-4|+|3-4|=6
第一行输入两个整数n,Q表示集合中初始元素个数和操作次数。(1<=n,Q<=100,000)
第二行给出n个整数a[0],a[1],a[2],…,a[n-1],表示初始集合中的元素。(0<=a[i]<=1,000,000,000)
接下来Q行,每行一个操作。(0<=v<=1,000,000,000)
对于第2类操作,如果集合中不存在值为v的元素可供删除,输出-1。
对于第3类操作,输出答案。
3 5
1 2 3
3
1 4
3
2 2
3
4
10
6
51nod1394 差和问题的更多相关文章
- 51nod1394 差和问题 值域线段树
水题..... 插入一个值$v$时,对于$[0, v - 1]$和$[v + 1, inf]$的点分别考虑就行了 删除相当于减去插入的贡献 用动态开点线段树卡点常数就过去了 复杂度$O(n \log ...
- 仿window系统自带的日期差计算器类
public class MonthSubstract { /// <summary> /// 日期差之月份 /// </summary> public int Months ...
- 基于tomcat与Spring的实现差异化配置方案
起因 在实际开发过程中经常需要加载各种各样的配置文件..比如数据库的用户名密码,要加载的组件,bean等等..但是这种配置在各个环境中经常是不一样的....比如开发环境和测试环境,真实的生产环境.. ...
- Smart3D系列教程2之 《为什么三维重建效果这么差?——探探那些被忽略的拍照要求和技巧》
一.照片采集的实用概念 根据照片进行三维重建的过程中,有人没怎么遇到坑,有人被坑的不轻.可能是模型的纹理失真,模型的法线错了,模型会生成我们各种也想不到的结果,那么,是什么导致三维重建效果这么差的?是 ...
- C# 获取当前月第一天和最后一天 计算两个日期差多少天
获取当前月的第一天和最后一天 DateTime now = DateTime.Now; DateTime firstDay = ); DateTime lastDay = firstDay.AddMo ...
- C#-和时间有关的计算代码、时间相减 得到天数、小时、分钟、秒差
asp.net(C#)时间相减 得到天数.小时.分钟.秒差 asp.net(C#)时间相减 得到天数.小时.分钟.秒差 DateTime dtone = Convert.ToDateTime( ...
- 好程序与差程序Good Programming, Bad Programming
好程序与差程序 Good Programming, Bad Programming 发布时间: 2012-11-20 16:32:21| 阅读数:2,735 views 优秀的程序可以使复杂的东西看起 ...
- 这是用过的"最差"树形插件
这是用过的"最差"树形插件 !!! 或许大家听过一个bootstrap UI框架---ace皮肤.有兴趣的童鞋可以在线查看:https://www.iteblog.com/ac ...
- 什么是遗传方差(Genetic variance)、加性遗传方差(Additive genetic variance)、显性遗传方差(Dominance genetic variance)、上位遗传方差(Epistatic genetic variance)
遗传方差:遗传方差又称表型方差(phenotypic variance),通常结合基因型方差(genotype variance)和环境方差(environmental variance).遗传方差主 ...
随机推荐
- CSS自定义文件上传按钮
今天一同事问我文件上传按钮的问题,情况是这样的,他页面上有3个按钮,分为左中右三个,左边的位按钮甲,右边的位按钮乙,而中间的就是个文件选择按钮,情况大概是这个样子的: 两边的按钮都有了样式,但中间的选 ...
- 通过 Mesos、Docker 和 Go,使用 300 行代码创建一个分布式系统
[摘要]虽然 Docker 和 Mesos 已成为不折不扣的 Buzzwords ,但是对于大部分人来说它们仍然是陌生的,下面我们就一起领略 Mesos .Docker 和 Go 配合带来的强大破坏力 ...
- UVA 624 CD(01背包+输出方案)
01背包,由于要输出方案,所以还要在dp的同时,保存一下路径. #include <iostream> #include <stdio.h> #include <stri ...
- MJRefresh插件引起的错误
添加的头部或者尾部刷新,离开这个界面的时候需要移除 - (void)dealloc { [_tableView removeHeader];} 不同版本的处理的方式不同 报的错误: 类的一个实例 ...
- Visual Studio 2015支持为Linux构建应用
点这里 微软著名的集成开发环境有可能是首次在其产品页提及了竞争对手Linux.Visual Studio 2015的页面声称,“Build for iOS, Android, Windows devi ...
- (6)妈的终于找到能用的nehe sdk了
在网上下载了有十多个,终于找到一个能用的了 下面是下载地址: http://download.csdn.net/detail/jason_bourn/681620#comment 泪奔啊~
- eclipse导入的工程前面有感叹号是什么意思
1.尤其是从其他地方拷贝来并且直接加载的工程,刚打开往往会看到工程的图标上有个红色的感叹号,这是因为build path 出错了,里面有缺失或者无法找到的包. 2. 原因:显示红色感叹号是因为jar包 ...
- TableViewCell自定义分割线
产品设计的要求cell的分割线长度不用是整个屏幕宽,并且设计要求分割线为2px(两条),上下不同色. 实现如下: UITableView中将分割线样式改为None tableView.separato ...
- SPRING IN ACTION 第4版笔记-第十章Hitting the database with spring and jdbc-003-四种方式获取DataSource
一.概述 1.Spring offers several options for configuring data-source beans in your Spring application, i ...
- Android隐式启动匹配:action,category,data
简介 Android开发中,Activity,Service 和 BroadcastReceiver 启动有两种方式,显示启动和隐式启动. 为方便下面描述,我以Activity启动为例. 显示启动便是 ...