摘要: 用树状数组动态和查询修改排名。树状数组可以很方便地查询前缀和,那么可以利用这一特点,记录一个点在树状数组里最后一次出现的位置,查询出这个位置,就可以知道这个点的排名了。更改这个点的排名的时候只要把原来位置修改成0,然后在新的位置加上1就行了。把询问离线,数据范围比较大,先用快排+去重离散(用map也... 阅读全文
posted @ 2015-08-30 16:29 陈瑞宇 阅读(423) 评论(1) 推荐(0) 编辑
摘要: 3e7暴力,800ms+过,单调队列维护区间最小值。#includeusing namespace std;typedef long long ll;const int maxn = 3e7+5;int x[maxn], dq[maxn], pos[maxn];int main(){ freo... 阅读全文
posted @ 2015-08-30 15:15 陈瑞宇 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 题意读懂了就好做了,就是求一下点双连通分量。维护一下一颗子树的结点数,对于一个结点当u是割点的时候,统计一下u分割的连通分量v,每得到一个连通分量的结点数cnt(v)和之前连通分量结点数sum相乘一下就好。最后加一下和u的子树上的连通分量总数和其它的结点的乘积。B,C中其中一者可以是A,所有最后还要... 阅读全文
posted @ 2015-08-30 15:05 陈瑞宇 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 这道题挺像hdu 5093 Battle ships的,不过那道题是要求最多放置的点数,而这道题是要求最小点覆盖。顶点覆盖的定义是:在G中任意边至少有一个端点属于顶点集合S。一个重要的位置有(x,y)两个坐标,而要守住这个这个位置就是相当于连了一条边x到y的边。选了一个(x,y)就相当于选了所有相同... 阅读全文
posted @ 2015-08-30 10:31 陈瑞宇 阅读(616) 评论(3) 推荐(0) 编辑
摘要: 不难发现在一次操作以后,hi=min(hi-1,hi-1,hi+1),迭代这个式子得到k次操作以后hi=min(hi-j-(k-j),hi-k,hi+j-(k-j)),j = 1,2,3...当k == min(hi-j+j,hi+j+j)时hi会变成0,因为min具有传递性,那么可以左右分开来考虑... 阅读全文
posted @ 2015-08-30 10:17 陈瑞宇 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 优先队列模拟一下就好。#includeusing namespace std;priority_queueq;int main(){ int n; scanf("%d",&n); int t; scanf("%d",&t); for(int i = 2; i =t){ ... 阅读全文
posted @ 2015-08-30 09:36 陈瑞宇 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 简单题,求一下所有数的2和3的幂是任意调整的,把2和3的因子除掉以后必须相等。求lcm,爆了long long。我得好好反省一下,对连乘不敏感#includeusing namespace std;typedef long long ll;const int maxn = 1e5+5;ll a[ma... 阅读全文
posted @ 2015-08-30 09:36 陈瑞宇 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 算一下复杂度。发现可以直接暴。对于u枚举a和b,判断一下是否连边,更新答案。#includeusing namespace std;int n,m;const int maxn = 4001;#define PB push_backvector G[maxn];bool g[maxn][maxn];... 阅读全文
posted @ 2015-08-30 09:36 陈瑞宇 阅读(176) 评论(0) 推荐(0) 编辑