传送门

外边二分,里面拿线段树维护贪心就行了。

#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相关推荐

  1. Codechef July Challenge 2018 : Subway Ride

    传送门 首先(想了很久之后)注意到一个性质:同一条边有多种颜色的话保留3种就可以了,这是因为假如最优解要求当前位置与相邻两条边都不相同,那么只要有3条边,就肯定可以满足这一点. 完事就做一个nlogn ...

  2. 【线段树 泰勒展开】Codechef April Challenge 2018 Chef at the Food Fair

    第一次写泰勒展开:本地和CC差距好大 题目大意 大厨住的城市里办了一场美食节.一条街上开设了$N$个摊位,编号为$1∼N$.这天开始时,第$i$个摊位的食物会导致食物中毒的概率是$P_i$.在这一天中 ...

  3. Codechef January Challenge 2018 - Killjee and k-th letter

    题意: 给出一个的串 s,将 s 所有子串按照字典序排列好相接起来形成一个新串q次询问,每一次询问问新串中的第 k 个字符是什么,强制在线. $|s|,q \le 2*10^{5} $ 跟所有子串有关 ...

  4. 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] 表示第 ...

  5. CodeChef March Lunchtime 2018 div2

    地址https://www.codechef.com/LTIME58B?order=desc&sortBy=successful_submissions 简单做了一下,前三题比较水,第四题应该 ...

  6. codechef October Challenge 2017解题报告

    第二次打challenge..果然还是拿不到钱(艹不过大佬)啊. A Balanced Contest 模拟就好. #include <bits/stdc++.h> #define gc ...

  7. [题解]CodeChef APRIL Challenge 17

    Similar Dishes 题意简述 给你两个大小为 4 4的字符串集合,问你并集是不是空集. 数据范围 1≤T≤2001 \leq T \leq 200 2≤len≤10 2 \leq len \ ...

  8. 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 次询问,每次给出 ...

  9. Lyft Level 5 Challenge 2018 - Elimination Round翻车记

    打猝死场感觉非常作死. A:判一下起点和终点是否在其两侧即可. #include<iostream> #include<cstdio> #include<cmath> ...

最新文章

  1. mysql当数据改变时_当数据库里面的价格变化时,发送信息到企业微信中
  2. WPF:数据绑定--PropertyChangeNotification属性更改通知
  3. 一个Github项目搞定微信、QQ、支付宝等第三方登录
  4. web.xml、JSP原理、指令
  5. 功夫熊孟军贤:如何拿到10万种子用户,创业的经验分享
  6. Winform 打包 混淆 自动更新
  7. 斯特林数-斯特林反演
  8. Flink Forward Asia 2019 - 总结和展望(附PPT下载链接)
  9. linux怎么建立链接文件,Linux 建立文件夹的链接
  10. java实现socket.io客户端功能
  11. nio java是什么_JAVA NIO是什么(zz)
  12. 仇保兴:城市的交通应该尊重什么样的发展战略?
  13. 2.IDEA修改主题
  14. 双击打开Excel2016文件后无法直接显示文件内容的解决办法
  15. Learning Deep Similarity Models with Focus Ranking for Fabric Image Retrieval 学习笔记
  16. 前有阿里巴巴,后有拼多多,网易考拉要去哪儿?
  17. 港澳出入境通行证办事流程
  18. IPsec+预共享密钥的IKE野蛮模式
  19. 力扣 两数相加 C语言 题解
  20. Java历史、现状和各版本技术更迭总结

热门文章

  1. tensorflow入门指南
  2. java窗体与Flash交互
  3. Flutter GetX 状态管理 响应式编程(三)
  4. Mr.J-- HTTP学习笔记(三)-- HTTP报文
  5. [shell] while read line 与for循环的区别
  6. [BZOJ1026]windy数
  7. 服务器项目白名单设置
  8. git游戏githug
  9. 转载:Pixhawk源码笔记七:姿态控制预览
  10. HTTP--历史、组件系统