codechef Chef and Problems】的更多相关文章

CodeChef:Chef and Problems 题目大意 有一个长度为n的序列$a_1,a_2,……,a_n$,每次给出一个区间[l,r],求在区间内两个相等的数的最远距离($max(j-i,满足a_i==a_j且l\le i,j \le r)$) 思路: 分块将序列分成sqrt(n)块预处理出每个数在每个块之后出现的最早位置和在每个块之前出现的最晚位置O(msqrt(n)) 然后就可以按块进行区间DP,求出所有块之间的最大值 O(nsqrt(n)) 答案就是max(f[L][R](两个数…
终于补出这道:一直耽搁到现在 找到一个代码可读性很好的分块temp; 题意:给一个长度为n 的数组 A,Q次询问,区间相等数的最大范围是多少? 数据范围都是10e5; 当然知道分块了: 传统分块看各种累: 找了一份很好的tmp<新技能get; #include<bits/stdc++.h> using namespace std; ; ; int a[N],res[S][N],occ[N]; int ans[N]; //一种很神奇的分块写法 //想办法 在其他题目扩展 struct qu…
题目: 题意:给定序列,求[l,r]区间内数字相同的数的最远距离. 链接:https://www.codechef.com/problems/QCHEF #include<bits/stdc++.h> #define LL long long #define ULL unsigned long long #define rep(i,j,k) for(int i=j;i<=k;i++) #define dep(i,j,k) for(int i=k;i>=j;i--) #define…
[CODECHEF]Chef and Churus Description 有一个长度为\(n\)的数组\(A\),有\(n\)个函数,第\(i\)个函数的值为\(\sum_{j=l_i}^{r_i}A_j\) 有两种操作: ①修改\(A_i\) ②询问第\(l\)~\(r\)个函数值的和. Input First Line is the size of the array i.e. N Next Line contains N space separated numbers Ai denoti…
Chef and The Right Triangles The Chef is given a list of N triangles. Each triangle is identfied by the coordinates of its three corners in the 2-D cartesian plane. His job is to figure out how many of the given triangles are right triangles. A right…
题目链接 Chef and Triangles 先排序,然后得到$m - 1$个区间: $(a[2] - a[1], a[2] + a[1])$ $(a[3] - a[2], a[3] + a[2])$ $……$ $(a[n] - a[n - 1], a[n] + a[n - 1])$ 对这些区间求交集  再和$[L, R]$求并集,最后的元素个数就是答案. #include <bits/stdc++.h> using namespace std; #define rep(i,a,b) for…
题意: 单点修改$a$ 询问$a$的区间和$f$的区间和 原来普通计算机是这道题改编的吧... 对$f$分块,预处理$c[i][j]$为块i中$a_j$出现几次,$O(NH(N))$,只要每个块差分加上然后扫一遍就行了不用树状数组之类的 修改,整块直接改,还要单点修改$a$ 查询,整块直接查,两边暴力查询$a$的区间和 对$a$的操作可以用树状数组,也可以再分块维护前缀和实现$O(N)-O(1)$ 这样不用带一个log总复杂度$O(NH(N))$ 实测快了0.4s #include <iostr…
做法:我们考虑前缀异或和,修改操作就变成了区间[i,n]都异或x 查询操作就变成了:区间[1,x]中有几个k 显然的分块,每个块打一个tag标记表示这个块中所有的元素都异或了tag[x] 然后处理出这个块中每种数的个数 注意查询的时候零散的块要下放标记 代码: #include<bits/stdc++.h> #define N 100005 #define M 334 using namespace std; int cnt[M][N*14],sum[N],tag[M],ll[M],rr[M]…
传送门 题意:现在有nnn个位置,每个位置上有一个值aia_iai​. 要求支持如下两种操作: 区间乘vvv 求区间的(1−ai)(1-a_i)(1−ai​)之积 思路: 考虑转换式子: Ans=∏i=lr(1−ai)=e∑i=lrln(1−ai)Ans=\prod_{i=l}^r(1-a_i)=e^{\sum_{i=l}^rln(1-a_i)}Ans=∏i=lr​(1−ai​)=e∑i=lr​ln(1−ai​) 于是只需维护∑i=lrln(1−ai)\sum_{i=l}^rln(1-a_i)∑…
高嘉煊讲的杂题:A*和网络流的练手题 题目大意 https://s3.amazonaws.com/codechef_shared/download/translated/SEPT16/mandarin/CHEFKC.pdf 一张有向带权图,固定$S$和$T$,求权值第$k$小的割. $n \le 77,m\le 777,k \le 777$ 题目分析 考虑如何描述每一种割:$p_i=1$表示$S$与$i$连通:$p_i=0$表示$i$与$T$连通.注意到这里的$\{p_i\}$与每种割是一一对应…