数据结构
hi
shawwwOvO
这个作者很懒,什么都没留下…
展开
-
2018ic南京 I-Magic Potion(网络流、最大流)
题意:给定n、m、kn、m、kn、m、k分别表示英雄个数、怪兽个数、药水数量。每个英雄可以杀死一系列怪物中的至多一个,每个怪物最多被杀死一次。kkk个药水可以额外给任意kkk个英雄增加一次杀死怪物的机会。(换句话说,用了药水英雄可以多杀一个怪物)问最多杀死怪物个数思路:最大流,问题在于建图。强哥一眼秒,不愧是强。一开始建图是这样的但是这样可能产生问题是对于k=0的情况下,由于S1到英雄的流量限制是2,但是实际限制应该只有1。就会wa这样的情况其实只要把n和k分开就好,建图如下数据范围M≤2原创 2020-12-11 19:59:50 · 103 阅读 · 0 评论 -
ccpc长春-K. Ragdoll(启发式合并、并查集、gcd转化)map的神奇tle
K. Ragdoll菜死我得了unordered_map<int, LL> mp[maxn];//存连通块内元素a[i]vector<int> g[maxn];//存数字大小为下标的解int f[maxn], sz[maxn];//并查集int a[maxn];LL ans;int find(int x) { if (f[x] == x)return x; else return f[x] = find(f[x]);}void merge(int x, int原创 2020-11-25 17:02:58 · 446 阅读 · 0 评论 -
Balanced Diet(前缀数组,转化)
Balanced Diet(读题很重要看了半天读错题意没看见maximum我晕鼓7 )题意:给定nnn个糖,每个只能用一次,在nnn行输入中包含了ai bia_i\ b_iai bi分别表示这个糖的贡献和他的类型。类型取值范围为[1,m][1,m][1,m]。给定数组lnl_nln表示如果选择类型iii,那么总共的糖果个数pip_ipi应该大于lil_ili,当然也可以选择不选。问SC\frac{S}{C}CS的最大值,这里SSS表示选择的糖果的sum(ai)sum原创 2020-10-09 17:32:13 · 328 阅读 · 0 评论 -
H - Skyscraper(树状数组、差分、思维、区间加、单点修改)
我是sb^^用区间加、单点操作写的代码只用单点操作H - Skyscraper 题意: 原数组hnh_nhn初始值均为0,给定数组ana_nan是要求达到的值。现在可以选择下标[l,r][l,r][l,r]进行区间+1+1+1的操作。现在有两种操作:1 l r k1\ \ l \ \ r \ \ k1 l r k表示对数组al,al+1,.... ,ar原创 2020-10-08 21:04:22 · 258 阅读 · 0 评论 -
hash
const ull P = 131;ull h[maxn], po[maxn]; //h存hash,po存P^nint l[3], r[3];char s[maxn]; //输入串ull geth(int l, int r) { //返回s[l,r]的hash值 return h[r] - h[l - 1] * po[r - l + 1];}int main() { int T, len, m; ull temp; //sci(T); T = 1; po[0] = 1;原创 2020-10-01 20:21:16 · 67 阅读 · 0 评论 -
XOR Inverse(Trie,二进制贪心)
XOR InverseXOR Inverse CF1419C题意:给定n个数字,要求给出最小的xxx使得bi=ai⊕xb_i=a_i\oplus xbi=ai⊕x之后的序列的逆序对总和最小思路:遇到二进制必贪心定理^^,但是这边得转化一下,考虑每一位取000 ororor 111的代价怎么计算。因为逆序对的定义是i<j&&bi>bji<j \&\& b_i>b_ji<j&&bi>bj,这里涉及到比大小,放原创 2020-10-01 13:47:06 · 523 阅读 · 0 评论 -
差分
差分及模板题基础思想两个模板题增减序列Tallest Cow基础思想两个模板题增减序列ACwing 增减序列注意:对应i=1i=1i=1的情况,不计入正负计数LL a[maxn],b[maxn];int main () { int n; cin>>n; LL pos=0,neg=0; for(int i=1;i<=n;i++){ cin>>a[i]; if(i==1)b[i]=a[i];原创 2020-07-11 22:57:46 · 136 阅读 · 0 评论 -
Nikitosh 和异或 LibreOJ - 10051
Nikitosh 和异或 LibreOJ - 10051Nikitosh 和异或 LibreOJ - 10051题意:给定数量为NNN数列A,要求最大值:(A[l1]⨁A[l1+1]⨁…⨁A[r1])+(A[l2]⨁A[l2+1]…⨁A[r2])(A[l1]⨁A[l1+1]⨁…⨁A[r1])+(A[l2]⨁A[l2+1]…⨁A[r2])(A[l1]⨁A[l1+1]⨁…⨁A[r1])+(A[l2]⨁A[l2+1]…⨁A[r2]),其中1≤l1≤r1<l2≤r2≤N1≤l1≤r1<l2≤r2≤原创 2020-07-04 16:33:24 · 166 阅读 · 0 评论 -
POJ 1151 Atlantis(扫描线法、线段树、离散化)
POJ 1151 Atlantis(扫描线法、线段树、离散化)蓝书线段树练习题 POJ 1151 Atlantis题意:给定n个矩形的左下、右上的两个坐标点(x,y)(x,y)(x,y),求他们的面积并(总面积)数据范围:n:100、x/y:1e5n:100、x/y:1e5n:100、x/y:1e5思路:现在好困明天再写^^LL n;struct SegmentTree{ int ...原创 2020-04-29 01:16:26 · 105 阅读 · 0 评论 -
POJ 2482 Stars in Your Window(扫描线法、线段树区间加维护最大值、离散化)
POJ 2482 Stars in Your Window蓝书线段树练习题POJ 2482 Stars in Your Window题意:给定nnn个星星,长www高hhh的框框。每个星星给定坐标(x,y)(x,y)(x,y),亮度ccc。问框内最大的亮度和。(边界上的亮度不记)数据范围:n:1e4,w/h:1e6,x/y:231n:1e4,w/h:1e6,x/y:2^{31}n:1e4,...原创 2020-04-28 12:09:07 · 100 阅读 · 0 评论 -
Can you answer these queries III(线段树求区间最大子段和)
Can you answer these queries III(区间最大子段和)蓝书题目Can you answer these queries III给定长度为N的数列A,以及M条指令 (N≤500000, M≤100000),每条指令可能是以下两种之一:“2 x y”,把 A[x] 改成 y。“1 x y”,查询区间 [x,y] 中的最大连续子段和,即max(x≤l≤r≤y)∑ri...原创 2020-04-25 23:29:46 · 236 阅读 · 0 评论 -
线段树求区间和(模板2、lazy数组)
给定一个 n 位数组和两种操作:操作1:数组中某个区间的所有数字加上一个值操作2:查询数组中某个区间的所有数字之和模板题struct SegmentTree{ int l,r; LL sum,add; #define l(x) tree[x].l #define r(x) tree[x].r #define sum(x) tree[x].sum #de...原创 2020-04-25 23:18:39 · 159 阅读 · 0 评论 -
线段树求区间最大值(模板1)
题意:给定一个 n 位数组和两种操作:操作1:修改数组中某个位置的值操作2:查询数组中某个区间的最大值模板题struct SegmentTree{ int l,r; int dat; #define l(x) tree[x].l #define r(x) tree[x].r #define dat(x) tree[x].dat}tree[maxn*4];...原创 2020-04-25 23:16:51 · 1650 阅读 · 0 评论 -
Interval GCD(线段树带修改求区间gcd)
D. Interval_GCD蓝书题目 Interval GCD题意:给定n个数字Ai,M次操作(N:5e5,M:5e5)操作有两种:C l r d 将A[l,r]加上dQ l r 询问A[l,r]的最大公约数思路:gcd(a1,a2,a3,a4...,an)=gcd(a1,a2−a1,a3−a2,a4−a3...an−an−1)\gcd(a_1,a_2,a_3,a_4.....原创 2020-04-25 23:11:18 · 346 阅读 · 0 评论 -
线段树与树状数组
线段树线段树模板树状数组模板线段树模板可实现:单点查询、区间查询void up(int rt){ s[rt]=s[rt*2]+s[rt*2+1];}void build(int rt,int l,int r){ if(l==r){ s[rt]=1; return ; } int mid=(l+r)/2; build...原创 2020-04-25 23:01:01 · 194 阅读 · 0 评论 -
The XOR Largest Path(trie、poj3764)
The XOR Largest PathThe XOR Largest Path为什么牛客过了poj没过我好菜啊int n;int trie[maxn*32+5][2],tot=1,D[maxn];vector<int> G[maxn],W[maxn];void inser(int a){//trie插入 int p=1; int ch=1; for...原创 2020-04-20 10:43:26 · 94 阅读 · 0 评论 -
拨号(trie模板)
拨号HDU 1671题意:给定n个字符串,其中有一个是另一个的前缀就输出NO。模板int n,m;int trie[maxn][30],tot=1;int en[maxn];char ss[maxn][30];void inser(char *s){//trie插入 int ch,len=strlen(s),p=1; for(int i=0;i<len;i++...原创 2020-04-20 10:42:33 · 89 阅读 · 0 评论 -
前缀统计(trie)
前缀统计1010A 前缀统计 给定 N 个字符串 S1,S2…SN,接下来进行 M 次询问,每次询问给定一个字符串 T,求 S1−SN中有多少个字符串是 T 的前缀。输入字符串的总长度不超过 106,仅包含小写字母。Trie模板题,把插入的时候的结尾bool数组改成计数器int n,m;int trie[maxn][30],tot=1;int en[maxn];char sn[ma...原创 2020-04-20 10:42:01 · 172 阅读 · 0 评论 -
The XOR Largest Path
The XOR Largest PathThe XOR Longest Path题意:给定n个数Ai,问两个数A进行XOR后的最大值倒叙建trie,每次到p的时候对相对位置进行判断,如果有就从相对位置出发int n;int trie[maxn*32+5][2],tot=1;void inser(LL a){//trie插入 int p=1; LL ch=1ll; ...原创 2020-04-20 10:41:04 · 116 阅读 · 0 评论 -
Trie
Trie模板前缀统计拨号模板int n,m;int trie[maxn][30],tot=1;int en[maxn];string sn;void inser(string s){//trie插入 int ch,len=s.length(),p=1; for(int i=0;i<len;i++){ ch=s[i]-'a'; if(...原创 2020-04-19 00:37:26 · 121 阅读 · 0 评论 -
C. Linova and Kingdom(Codeforces Round #635 (Div. 2))(贪心、dfs)
C. Linova and Kingdom 1337 B题意:给定一棵n个节点的树。规定节点1为终点。将剩下n-1个点中的k个点作为出发点(工业城市),剩下的包括节点1为旅游城市。要求设计选定方案,使沿途经过的旅游城市的总数最大。输出最大值。思路:手推样例。发现选了一个点后,当前总数就是加上这个节点的路径长度,减去后面节点中作为工业城市的个数。所以就让后面的节点全都作为工业城市,这...原创 2020-04-17 20:01:21 · 136 阅读 · 0 评论 -
CF 1253D. Harmonious Graph(并查集)
1253D. Harmonious Graph题意:给定n点m边图。问最少添加几条边,使变为平衡图。即若a~b联通,[a,b]中的所有点可达。第一反应并查集。思路是没错的但是后来越想越乱,以后一定记得那样例人工模拟一下再码。思路:一开始用并查集把所有路都联通,大的都指向小的。然后倒序遍历:从n开始找到他的最前面的点也就是这个连通块的起始点x=fin(i),从x到i之间的所有点的起始点都应...原创 2020-03-31 21:07:53 · 154 阅读 · 0 评论 -
Mancher
Manacher算法详解及模板(求解最长回文串) bestsort.cn==回文半径=:如上图,P点为中心点,ABCDEDCBA构成一个回文串,那么r的长度就是该回文串的回文半径中心检测法:依次枚举每一个点的回文半径,取所有回文半径的最大值.当当前字符满足回文条件的时候,检测下一个字符,否则返回当前半径长度,然后回文半径长度回退为1开始检测下一点.但是这个回退是可以避免的.解释一下:...转载 2020-03-21 01:56:52 · 135 阅读 · 0 评论 -
Codeforces Global Round 7(马拉车)
Codeforces Global Round 7D1 Prefix-Suffix Palindrome(EASY)D2 Prefix-Suffix Palindrome(HARD)A Bad Ugly NumbersB MaximumsC Permutation PartitionsCodeforces Global Round 7D1 Prefix-Suffix Palindrome(...原创 2020-03-21 01:39:50 · 180 阅读 · 0 评论 -
CF 1282C.Petya and Exam(贪心、前缀和、离散化)
C. Petya and Exam审题胜利题意:在给定时间st内考试,可提前交卷。简单题0耗时a min,难题1耗时b min。每个题目有规定时间,在规定时间前未完成则成绩为0。问最大的做题数量。思路:一开始没读懂题意,膨胀到极致样例都不分析直接上来就写。因为时间t范围1e9,考虑离散化后用前缀和统计每个时间节点的0、1题目个数。遍历枚举提前交卷的时间,判断是否合法,记录答案ans。贪...原创 2020-03-18 01:36:16 · 105 阅读 · 0 评论 -
D. Secret Passwords(并查集)
D. Secret Passwords题意:给定n个字符串,如果两个字符串含有相同的字符就等效。问n个字符串中的不等效串的个数。对26个小写字符并查集,在同一个字符串中出现就算一类。最后统计类的个数。int f[30],vis[30];int fin(int x){ if(f[x]==0) return x; return f[x]=fin(f[x]);}...原创 2020-03-03 19:55:17 · 249 阅读 · 0 评论 -
一写东西(记得补)
忘记时候看一看字符串字符串反转字符串插入长度截取比较map二维下标是string字符串字符串反转tt就是s[i]反转后的string tt="";tt+=s[i];reverse(tt.begin(),tt.end());字符串插入头插ans.insert(0,tt);尾插ans+=tt;长度ans的字符个数 注意下标从0开始ans.length();截取从...原创 2020-02-15 22:27:07 · 248 阅读 · 0 评论 -
Building(HDU 5033)待补
HDU 5033题意:给定n个点的下标、高度。q次查询,问qi点向上的最大角度。好难啊,给定点不是按照1-n然后范围是1e7。我现在思路是用单调栈缩小左右两边遍历的范围,然后在r[i]和l[i]之遍历,角度取最小值。可是这样一来下标就要离散化。还没看题解、待补...原创 2020-02-28 23:06:18 · 116 阅读 · 0 评论 -
Largest Rectangle in a Histogram
link题意:给定每个点i的上限高度,问最大长方形的面积。单调栈统计左右小于i处高度的下标记为l[i]、r[i],所以能达到的最大长度为(r[i]-1)-(l[i]+1)+1,即(r[i]-l[i]-1)遍历t个点,统计最大值int l[maxn],r[maxn];int main(){ int t=ird(); while(t){ stack<LL...原创 2020-02-28 21:46:53 · 76 阅读 · 0 评论 -
单调栈
单调栈模板例题C2. Skyscrapers (hard version)单调栈1功能:找到从左/右遍历第一个比它小/大的元素的位置模板第i个数向左遍历的第一个比小于等于它的元素的位置,记为l[i]。 for(int i=1;i<=n;i++){ while(s.size()&&a[s.top()]>a[i]) s.pop(); ...原创 2020-02-26 23:30:14 · 124 阅读 · 0 评论 -
数的分段(二分答案
数列分段(二分luogu P1182二分答案,check,段数不对继续查找LL a[maxn];LL l=0,r=0,n,m;inline int check(LL ans){ int tot=0; LL t=0; for(int i=1;i<=n+1;i++){ if(t+a[i]>ans){ tot++;...原创 2020-02-07 23:44:26 · 183 阅读 · 0 评论 -
瑞士轮(归并
瑞士轮(归并见注释嗷int fen[200010],x[200020],sh[200020];//fen存分数,x存序号,sh存实力int w[100010],l[100010];//w存这一轮胜利的序号,l存这一轮输的序号bool cmp(int a,int b){ if(fen[a]==fen[b]) return a<b; else ...原创 2020-02-07 23:39:38 · 325 阅读 · 0 评论 -
逆序对(归并
逆序对(归并luogu P1908归并排序做法:(树状数组明天康康每次归并记录逆序对int yuan[500010],m[500010];long long ans=0;void solve(int s,int t){ if(s==t) return; int mid=s+t>>1; solve(s,mid),solve(mid+...原创 2020-02-07 23:26:52 · 87 阅读 · 0 评论