Gym 100960G (set+树状数组)
Problem Youngling Tournament
题目大意
给一个序列a[i],每次操作可以更改一个数,每次询问 将序列排序后有多少个数a[i]>=sum[i-1]。
n<=10^5,q<=5*10^4,a[i]<=10^12
解题分析
可以发现,在最优情况下,该序列长度最多为logn。
将询问离线后,用multiset来维护a[i],用树状数组来维护sum[i]。树状数组所存下标为离散化后的a[i]。
每次查询时跳跃式地在set中查找。
时间复杂度 O((n+m)log(n+m)+mlognlogn)
参考程序
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <cmath>
#include <ctime>
#include <string>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cassert>
#include <iostream>
#include <algorithm>
#pragma comment(linker,"/STACK:102400000,102400000")
using namespace std; #define N 100008
#define M 50008
#define LL long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define clr(x,v) memset(x,v,sizeof(x));
#define bitcnt(x) __builtin_popcount(x)
#define rep(x,y,z) for (int x=y;x<=z;x++)
#define repd(x,y,z) for (int x=y;x>=z;x--)
const int mo = ;
const int inf = 0x3f3f3f3f;
const int INF = ;
/**************************************************************************/ int n,m,tot,flag;
LL a[N],c[N],x[N*];
int b[N];
multiset<long long> S;
struct Binary_Indexed_Tree{
LL a[N*];
void clear(){
clr(a,);
}
void insert(int x,LL val){
for (int i=x;i<=N<<;i+=i & (-i))
a[i]+=val;
}
LL sigma(int x){
LL res=;
for (int i=x;i>;i-=i & (-i))
res+=a[i];
return res;
}
LL query(int x,int y){
return sigma(y)-sigma(x-);
}
}T;
int id(LL xy){
return lower_bound(x+,x+tot+,xy)-x;
}
set <long long> :: iterator it,it1;
void query(){
int ans=; LL tmp;
it = S.begin();
it1 = it ; it1++;
if (*it==*it1) ans++;
tmp=T.sigma(id(*it));
while (){
it = S.lower_bound(tmp);
if (it==S.begin()) it++;
if (it==S.end()) break;
it1 = it; it1--;
tmp=T.sigma(id(*it1));
if (*it>=tmp) ans++;
tmp=T.sigma(id(*it));
}
printf("%d\n",ans); } int main(){
scanf("%d",&n);
rep(i,,n){
scanf("%lld",&a[i]);
x[++tot]=a[i];
}
scanf("%d",&m);
rep(i,,m){
scanf("%d%lld",&b[i],&c[i]);
x[++tot]=c[i];
}
sort(x+,x+tot+);
tot=unique(x+,x+tot+)-x;
T.clear();
rep(i,,n){
T.insert(id(a[i]),a[i]);
S.insert(a[i]);
}
query();
rep(i,,m){
S.erase(S.find(a[b[i]]));
T.insert(id(a[b[i]]),-a[b[i]]);
S.insert(c[i]);
T.insert(id(c[i]),c[i]);
a[b[i]]=c[i];
query();
} }
Gym 100960G (set+树状数组)的更多相关文章
- Gym - 101755G Underpalindromity (树状数组)
Let us call underpalindromity of array b of length k the minimal number of times one need to increme ...
- CF Gym 100463A (树状数组求逆序数)
题意:给你一个序列,和标准序列连线,求交点数. 题解:就是求逆序对个数,用树状数组优化就行了.具体过程就是按照顺序往树状数组了插点(根据点的大小),因为第i大的点应该排在第i位,插进去的时候他前面本该 ...
- GYM 100741A Queries(树状数组)
A. Queries time limit per test 0.25 seconds memory limit per test 64 megabytes input standard input ...
- GYM 101889F(树状数组)
bit扫描坐标套路题,注意有重复的点,莽WA了. const int maxn = 1e5 + 5; struct node { ll B, F, D; bool operator < (con ...
- Codeforces Gym 100114 H. Milestones 离线树状数组
H. Milestones Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descripti ...
- Gym 101908C - Pizza Cutter - [树状数组]
题目链接:https://codeforces.com/gym/101908/problem/C 题意: 一块正方形披萨,有 $H$ 刀是横切的,$V$ 刀是竖切的,不存在大于等于三条直线交于一点.求 ...
- Codeforces Gym 100269F Flight Boarding Optimization 树状数组维护dp
Flight Boarding Optimization 题目连接: http://codeforces.com/gym/100269/attachments Description Peter is ...
- Gym - 100269F Flight Boarding Optimization(dp+树状数组)
原题链接 题意: 现在有n个人,s个位置和你可以划分长k个区域你可以把s个位置划分成k个区域,这样每个人坐下你的代价是该区域内,在你之前比你小的人的数量问你怎么划分这s个位置(当然,每个区域必须是连续 ...
- 【容斥原理】【推导】【树状数组】Gym - 101485G - Guessing Camels
题意:给你三个1~n的排列a,b,c,问你在 (i,j)(1<=i<=n,1<=j<=n,i≠j),有多少个有序实数对(i,j)满足在三个排列中,i都在j的前面. 暴力求的话是 ...
随机推荐
- [问题2014S05] 复旦高等代数II(13级)每周一题(第五教学周)
[问题2014S05] 设 \(A,B\) 分别是 \(4\times 3\) 和 \(3\times 4\) 实矩阵, \[ BA=\begin{pmatrix}-9 & -20 & ...
- Linux设置ssh无密码登陆
最近在折腾Hadoop,要用到主机间无密码登陆,设置的时候遇到了一些问题,这里记录一下. 假设A需要无密码登陆B. 那么首先需要在A上使用ssh-keygen生成id_rsa.pub的公钥,生成时,一 ...
- SQL MD5加密
) 加密结果:
- java 代理模式二:动态代理
java动态代理: java动态代理类位于java.lang.reflect包下,一般主要涉及两个类: 1.Interface InvocationHandler 该接口中仅定义了一个方法:Objec ...
- (二)Kafka动态增加Topic的副本(Replication)
(二)Kafka动态增加Topic的副本(Replication) 1. 查看topic的原来的副本分布 [hadoop@sdf-nimbus-perf ~]$ le-kafka-topics.sh ...
- nginx+tomcat 配置负载均衡
nginx 从Nginx官网下载页面(http://nginx.org/en/download.html)下载Nginx最新版本(我用的是nginx-1.8.1版本) 安装就直接把压缩包解压到一个路径 ...
- hiho_1141
题目 按顺序给出N个数字,求出所有的逆序对个数(逆序对指数字 Ai > Aj且 i < j) 题目链接:hiho_1141 数据规模为 100000,必须使用O(nlogn)的算法 ...
- 第5章 Web自动化测试
5.1 Selenium简介 5.1.1 自动化测试简介 5.1.2 Selenium简介 5.2 Selenium2环境搭建 5.3 Java基础 5.3.1 新建Java工程和类 5.3.2 Ec ...
- JSP动作标签
动作标签是一种特殊的标签,它影响JSP运行时的功能. (1)include动作标签 <jsp:include page=”文件的名字” /> <%-- 不可有 ...
- Xcode 8 的 Debug 新特性
Contents OverView Static Analyzer Localizability Instance Cleanup Nullablility Runtime Issue View De ...