Codechef August Challenge 2018 : Coordinate Compression
传送门
外边二分,里面拿线段树维护贪心就行了。
![](/assets/blank.gif)
![](/assets/blank.gif)
#include<cstdio> #include<vector> #include<cstring> #include<algorithm> #define MN 110000 #define lp p<<1 #define rp p<<1|1 using namespace std;vector<int> v[MN]; int t,n,s,a[MN],o[MN],z[MN<<2]; bool cmp(int x,int y){return a[x]==a[y]?x<y:a[x]<a[y];} inline int max(int x,int y){return x>y?x:y;} inline int min(int x,int y){return x<y?x:y;} void add(int p,int l,int r,int k,int v){z[p]=max(z[p],v);if (l==r) return;int mid=l+r>>1;if (k<=mid) add(lp,l,mid,k,v);else add(rp,mid+1,r,k,v); } int ask(int p,int l,int r,int L,int R){if (l==L&&r==R) return z[p];int mid=l+r>>1;if (R<=mid) return ask(lp,l,mid,L,R);elseif (L>mid) return ask(rp,mid+1,r,L,R);elsereturn max(ask(lp,l,mid,L,mid),ask(rp,mid+1,r,mid+1,R)); } inline bool ju(int k){long long o=0;int la=0,e=0;memset(z,0,(n+5)*16);for (int i=0;v[i].size();i++){for (int j=0;j<v[i].size();){int w,m;for (w=j+1;w<v[i].size();w++)if (v[i][w]-v[i][w-1]>k) break;m=ask(1,1,n,max(1,v[i][j]-k),min(n,v[i][w-1]+k))+1;for (;j!=w;j++) o+=m,add(1,1,n,v[i][j],m);}}return o<=s; } int main(){scanf("%d",&t);while(t--){scanf("%d%d",&n,&s);for (int i=0;i<n;i++) scanf("%d",&a[i]),o[i]=i;sort(o,o+n,cmp);v[0].push_back(o[0]+1);for (int i=1,j=0;i<n;i++) j+=a[o[i]]!=a[o[i-1]],v[j].push_back(o[i]+1);int l=0,r=n;while (l<r){int mid=l+r+1>>1;if (ju(mid)) l=mid;else r=mid-1;}printf("%d\n",ju(l)?l+1:0);for (int i=0;i<n;i++) v[i].clear();} }
View Code
转载于:https://www.cnblogs.com/Enceladus/p/9493909.html
Codechef August Challenge 2018 : Coordinate Compression相关推荐
- Codechef July Challenge 2018 : Subway Ride
传送门 首先(想了很久之后)注意到一个性质:同一条边有多种颜色的话保留3种就可以了,这是因为假如最优解要求当前位置与相邻两条边都不相同,那么只要有3条边,就肯定可以满足这一点. 完事就做一个nlogn ...
- 【线段树 泰勒展开】Codechef April Challenge 2018 Chef at the Food Fair
第一次写泰勒展开:本地和CC差距好大 题目大意 大厨住的城市里办了一场美食节.一条街上开设了$N$个摊位,编号为$1∼N$.这天开始时,第$i$个摊位的食物会导致食物中毒的概率是$P_i$.在这一天中 ...
- Codechef January Challenge 2018 - Killjee and k-th letter
题意: 给出一个的串 s,将 s 所有子串按照字典序排列好相接起来形成一个新串q次询问,每一次询问问新串中的第 k 个字符是什么,强制在线. $|s|,q \le 2*10^{5} $ 跟所有子串有关 ...
- CFCC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries
https://www.codechef.com/DEC17/problems/CHEFEXQ 题意: 位置i的数改为k 询问区间[1,i]内有多少个前缀的异或和为k 分块 sum[i][j] 表示第 ...
- CodeChef March Lunchtime 2018 div2
地址https://www.codechef.com/LTIME58B?order=desc&sortBy=successful_submissions 简单做了一下,前三题比较水,第四题应该 ...
- codechef October Challenge 2017解题报告
第二次打challenge..果然还是拿不到钱(艹不过大佬)啊. A Balanced Contest 模拟就好. #include <bits/stdc++.h> #define gc ...
- [题解]CodeChef APRIL Challenge 17
Similar Dishes 题意简述 给你两个大小为 4 4的字符串集合,问你并集是不是空集. 数据范围 1≤T≤2001 \leq T \leq 200 2≤len≤10 2 \leq len \ ...
- Codechef Coders’Legacy 2018 CLSUMG Sum of Primes
Description 设 f(x)f(x) 表示把 xx 拆分成两个质数之和的方案数. 例如 f(10)=2f(10)=2 , 因为 10=3+7=5+510=3+7=5+5 TT 次询问,每次给出 ...
- Lyft Level 5 Challenge 2018 - Elimination Round翻车记
打猝死场感觉非常作死. A:判一下起点和终点是否在其两侧即可. #include<iostream> #include<cstdio> #include<cmath> ...
最新文章
- mysql当数据改变时_当数据库里面的价格变化时,发送信息到企业微信中
- WPF:数据绑定--PropertyChangeNotification属性更改通知
- 一个Github项目搞定微信、QQ、支付宝等第三方登录
- web.xml、JSP原理、指令
- 功夫熊孟军贤:如何拿到10万种子用户,创业的经验分享
- Winform 打包 混淆 自动更新
- 斯特林数-斯特林反演
- Flink Forward Asia 2019 - 总结和展望(附PPT下载链接)
- linux怎么建立链接文件,Linux 建立文件夹的链接
- java实现socket.io客户端功能
- nio java是什么_JAVA NIO是什么(zz)
- 仇保兴:城市的交通应该尊重什么样的发展战略?
- 2.IDEA修改主题
- 双击打开Excel2016文件后无法直接显示文件内容的解决办法
- Learning Deep Similarity Models with Focus Ranking for Fabric Image Retrieval 学习笔记
- 前有阿里巴巴,后有拼多多,网易考拉要去哪儿?
- 港澳出入境通行证办事流程
- IPsec+预共享密钥的IKE野蛮模式
- 力扣 两数相加 C语言 题解
- Java历史、现状和各版本技术更迭总结