题意:给出\(a[1...n]\),共\(n\)次操作,每次删除一个位置\(p_i\)(强制在线),此时区间会变为两个分离的区间,求每次操作的最大区间逆序对 首先要知道必要的工具,按权值建立的主席树可以在\(O(nlogn)\)内得到任意区间长为\(n\)的逆序对 但每次切除的点如果是不断沿着边来切,那么要统计的区间总长是\(O(n^2)\) 考虑逆序对的贡献是可以互为计算得到的,那么能否每次只对相对较小的区间的复杂度进行统计,得到\(O(nlogn)\)的区间统计总长? 如果已知一个区间\([…
题目大意: 给定n段线段 编号为1~n 接下来m个询问 给定一点 输出离该点最近的线段的最小编号(距离相等时取编号小的) 题解 大致就是 1.坐标范围为(0,2^16-1) 将坐标系划分为2^8*2^8的小块 编号为0~2^8-1 判断线段穿过哪些小块 并用had[ i ][  ]保存穿过 i小块 的所有线段的编号 2.当给定一个点时 找到该点所在的小块 因为最近的线段可能不存在与这个小块 所以暴力 该小块 及其 八联通小块(共九个小块)的线段 #1. 这样可以获得坐标(x,y)所在小块的编号…
题目:略(不知道怎么从ZOJ搬题) 地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4054 把这题的每个点分成两种情况看,如果是从这个点开始,0算作2,1算作1,如果是中间点或者是结束点,和前一点的相同看作2,不相同看作1 则我们只需要算出该点的两种权值(之前提到的0算作2,1算作1和前一点的相同看作2,不相同看作1)分别乘以作为起始点出现的次数和作为中间点或者是结束点出现的次数 起始点出现的次数即是其从后向前数的…
好题 题意:给你n<=100000个数,每个数范围[0,1000],然后给你一个最大的代价T,每次最多合并k个数成为一个数,代价为k个数的总和.问最后合成1个数的总代价不大于T的最小k 题解:我们首先知道当k越大,总代价会越小,这样我们就找到了单调性,可以二分k看是否满足代价(又见最大值最小化问题).然后我们贪心寻找固定k的最小代价,可以想到每次取前k个最小的值合并成一个,再放入数组中继续这个操作,直到最后变成一个数,这样我们可以直接使用优先队列模拟. 但是直接做会超时,所以我就YY了一个优化的…
题目链接 题意 : 给出 N 个糖果.老师按顺序给 1~N 编号的学生分配糖果.每个学生要么不分.要么最少分一个.且由于是按顺序发放.那么对于某个有分到糖果的编号为 i 的学生.则 1~(i-1) 这些学生都最少有一个糖果.老师必须分完 N 个糖果.问你最后不同的分配方式有多少种 分析 : 队友根据组合计数的方法推出了答案是 2^(N-1) 你也可以通过打表的方式来找到这个规律 但是这里 N 很大.不能直接进行快速幂运算 需要进行降幂处理 有一个男人.他叫欧拉 提出了一个降幂公式 a^n mod…
2018 CCPC网络赛 Buy and Resell 题目描述:有一种物品,在\(n\)个地点的价格为\(a_i\),现在一次经过这\(n\)个地点,在每个地点可以买一个这样的物品,也可以卖出一个物品,问最终赚的钱的最大值. solution 用两个堆来维护,一个堆维护已经找到卖家的,一个堆维护还没找到卖家的. 对于第\(i\)个地点,在已经找到卖家的堆里找出卖的钱的最小值,如果最小值小于\(a_i\),则将卖家换成\(i\),然后将原来的卖家放到没找到卖家的那里:如果最小值对于\(a_i\)…
2019-ACM-ICPC-南京区网络赛-D. Robots-DAG图上概率动态规划 [Problem Description] ​ 有向无环图中,有个机器人从\(1\)号节点出发,每天等概率的走到下一个节点或者停在当前节点,并且第\(i\)天消耗\(i\)的耐久度.求它到达\(n\)号节点时期望消耗的耐久度是多少? ​ 题目保证只有一个入度为\(0\)的节点,只有一个出度为\(0\)的节点. [Solution] ​ 概率\(dp\). ​ 假设每天消耗\(1\)点耐久度.定义\(dp[u]\…
题目链接  2016 青岛网络赛  Problem C 题意  给出一些敏感词,和一篇文章.现在要屏蔽这篇文章中所有出现过的敏感词,屏蔽掉的用$'*'$表示. 建立$AC$自动机,查询的时候沿着$fail$指针往下走,当匹配成功的时候更新$f[i]$ $f[i]$表示要屏蔽以第$i$个字母结尾的长度为$f[i]$的字符串. #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i &l…
A Live Love 水 #include <algorithm> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; ; int main() { int t; scanf("%d", &t); while(t--) { int n,m; scanf("%d%d"…
题目链接 题意 : 给出一个由数字组成的字符串.然后要你找出其所有本质不同的回文子串.然后将这些回文子串转化为整数后相加.问你最后的结果是多少.答案模 1e9+7 分析 : 应该可以算是回文树挺裸的题目吧 可惜网络赛的时候不会啊.看着马拉车想半天.卒... 对于每一个节点.记录其转化为整数之后的值 然后在回文串插入字符的时候 不断维护这个信息就行了 其实很好理解.看一下代码就懂了 ( 如果你学过回文树的话... ) 就是多加了变量 val .维护语句 #include<bits/stdc++.h…