
树状数组
bestFy
世界上最最最渣的oier.
展开
-
51nod1394 差和问题
题面在这里离线。首先离散化。然后我们考虑加进一个数或减去一个数的改变量:假设数是x,即答案要加上(或减去)x*(小于x的数的个数) - (小于x的数的和) + (大于x的数的和) - x*(大于x的数的个数)。开两个树状数组分别维护数的个数和数的和就好。注意开long long。/***************************************************原创 2017-11-15 00:55:06 · 268 阅读 · 0 评论 -
bzoj1573: [Usaco2009 Open]牛绣花cowemb
题面在这里明显不能暴力枚举两条直线。我们考虑怎样的情况会使得两条直线相交于圆内。如图:只有这种情况:两条线与圆的4个交点相间排列。故我们求出每条直线与圆的交点,把圆拉成一条线段,然后在线段上求交错的线段对数,树状数组+离散化即可。/*************************************************************原创 2017-12-03 12:36:12 · 833 阅读 · 0 评论 -
zoj2112 Dynamic Rankings
题面在这里题目大意:给一个序列,要求维护一个数据结构支持单点修改,区间查询第k大。动态第k大,树状数组套主席树。第一次写树套树。#include#include#include#include#include#include#include#include#include#define rep(i, x, y) for (int i = (x);原创 2017-11-29 23:12:06 · 290 阅读 · 0 评论 -
bzoj1106: [POI2007]立方体大作战tet
题面在这里题意:给2*n个编号为1~n的数,编号为i的都有两个,每次可以交换相邻两个数,如果有两个相同的数相邻就消去。并且剩下的数字会合并,有可能会产生连锁反应。 问最少几次操作能把所有的都消去。做法:贪心。 一个非常直接的想法,每次遇到一个数,假如之前出现过就不断交换和之前那个抵消。 正确性证明如下: 1. 假如有这样的情况 1 2 …. 2 1,显然先消去2比先原创 2018-01-05 13:43:25 · 256 阅读 · 0 评论 -
bzoj1818: [Cqoi2010]内部白点
题面在这里吐槽:现在做题再也不能想也不想就看题解了!!!QAQ!!否则我可能就没有未来了QAQ 好了不要管上面的吐槽qaq题意:平面上有n个黑点,剩下的整点全部是白点。 一个白点如果上下左右各至少有一个黑点就称内部白点。 现在每一次操作可以将所有的内部白点变成黑点,一直操作到不能操作为止。 问最后有多少的黑点。如果无法停止操作输出-1. n<=105,坐&原创 2018-01-31 18:32:02 · 377 阅读 · 0 评论 -
loj#2323. 「清华集训 2017」小 Y 和地铁(暴搜+树状数组)
题面在这里题意:看原题吧不概括了。。做法:观察到 nnn 很小。考虑直接暴力,所有区间按照左端点排序,右端点用树状数组维护。 或者可以用位运算优化掉一个 loglog\log 。代码:#include<cstdio>#include<cstring>#include<iostream>#include<alg...原创 2018-03-06 00:29:04 · 463 阅读 · 0 评论 -
Codeforces Round #480 (Div. 2)
比赛链接彻底沦为要么过不掉pp要么就FST的智障选手。A. Links and Pearls看余数是否为0即可。#include&lt;bits/stdc++.h&gt;#define rep(i,x,y) for (int i=(x); i&lt;=(y); i++)#define per(i,x,y) for (int i=(x); i&gt;=(y); i--)#d...原创 2018-05-09 21:23:23 · 445 阅读 · 1 评论