NEERC 17 G.The Great Wall

Solution

这题的第一步tricktricktrick是:我们注意到取a,b,ca,b,ca,b,c的集合两两不交且并集为UUU,因此确定了b,cb,cb,c之后可以简单地唯一确定aaa,于是我们通过让bi−=ai,ci−=ai,Ans+=∑aib_i-=a_i,c_i-=a_i,Ans+=\sum a_ibi​−=ai​,ci​−=ai​,Ans+=∑ai​来削减一维。

然后令bi′=∑j=1ibib'_i=\sum_{j=1}^ib_ibi′​=∑j=1i​bi​,ci′=∑j=1icic'_i=\sum_{j=1}^ic_ici′​=∑j=1i​ci​,二分答案kkk。

  • 当x+r−1≥yx+r-1\geq yx+r−1≥y,sum=cx+r−1′−cy−1′+by−1′−bx−1′+by+r−1′−bx+r−1′=(cx+r−1′−bx−1′−bx+r−1′)+(−cy−1′+by−1′+by+r−1′)≤ksum=c'_{x+r-1}-c'_{y-1}+b'_{y-1}-b'_{x-1}+b'_{y+r-1}-b'_{x+r-1}=(c'_{x+r-1}-b'_{x-1}-b'_{x+r-1})+(-c'_{y-1}+b'_{y-1}+b'_{y+r-1})\leq ksum=cx+r−1′​−cy−1′​+by−1′​−bx−1′​+by+r−1′​−bx+r−1′​=(cx+r−1′​−bx−1′​−bx+r−1′​)+(−cy−1′​+by−1′​+by+r−1′​)≤k,可以简单地用二维数点解决。
  • 当x+r−1<yx+r-1<yx+r−1<y,sum=(bx+r−1′−bx−1′)+(by+r−1′−by−1′)≤ksum=(b'_{x+r-1}-b'_{x-1})+(b'_{y+r-1}-b'_{y-1})\leq ksum=(bx+r−1′​−bx−1′​)+(by+r−1′​−by−1′​)≤k,同样可以简单地用二维数点解决。

时间复杂度O(nlg2n)O(n lg^2n)O(nlg2n)。

Code

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <cassert>
#include <string.h>
//#include <unordered_set>
//#include <unordered_map>
//#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; }
template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int,int> PR;
typedef vector<int> VI;const lod eps=1e-11;
const lod pi=acos(-1);
const int oo=1<<30;
const ll loo=1ll<<62;
const int mods=998244353;
const int MAXN=600005;
const int INF=0x3f3f3f3f;//1061109567
/*--------------------------------------------------------------------*/
inline ll read()
{ll f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
int n,r,s[MAXN];
ll p[MAXN],b[MAXN],c[MAXN],B[MAXN],a[MAXN],k;
void add(int x,int y) { if (!x) return; for (;x<=n-r+1;x+=x&(-x)) s[x]+=y; }
int query(int x) { upmin(x,n-r+1); int ans=0; for (;x;x-=x&(-x)) ans+=s[x]; return ans; }
ll solve1(ll x)
{ll ans=0;for (int i=1;i<=n-r+1;i++) B[i]=p[i]=-c[i-1]+b[i-1]+b[i+r-1];sort(p+1,p+n-r+2);for (int i=1;i<=n-r+1;i++) B[i]=lower_bound(p+1,p+n-r+2,B[i])-p;for (int i=1;i<=r-1;i++) add(B[i],1);for (int i=1;i<=n-r+1;i++){add(B[i],-1);if (i<=n-r-r+2) add(B[i+r-1],1);ans+=query(upper_bound(p+1,p+n-r+2,x-(c[i+r-1]-b[i-1]-b[i+r-1]))-p-1);}return ans;
}
ll solve2(ll x)
{ll ans=0;for (int i=1;i<=n-r+1;i++) B[i]=p[i]=b[i+r-1]-b[i-1];sort(p+1,p+n-r+2);for (int i=1;i<=n-r+1;i++) B[i]=lower_bound(p+1,p+n-r+2,B[i])-p;for (int i=r;i<=n-r+1;i++) add(B[i],1);for (int i=1;i<=n-r+1;i++){if (i<=n-r-r+2) add(B[i+r-1],-1);ans+=query(upper_bound(p+1,p+n-r+2,x-(b[i+r-1]-b[i-1]))-p-1);}return ans;
}
signed main()
{ll sum=0;n=read(),r=read(),k=read();for (int i=1;i<=n;i++) a[i]=read(),sum+=a[i];for (int i=1;i<=n;i++) b[i]=read()-a[i]+b[i-1];for (int i=1;i<=n;i++) c[i]=read()-a[i]+c[i-1];ll l=0,r=1000000ll*n;while (l<r){ll mid=(l+r)>>1,t=solve1(mid)+solve2(mid);if (t>=k) r=mid;else l=mid+1;}printf("%lld\n",r+sum);return 0;
}

NEERC 17 G.The Great Wall相关推荐

  1. NEERC 17 Problem I. Interactive Sort

    NEERC 17 Problem I. Interactive Sort Solution 当写了两倍正解的代码使用了两倍于正解的操作步数-- 刚开始的想法是求出一个bbb,再求出一个aaa,依次轮换 ...

  2. ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)G GCD Guessing Game

    G: 要你去才Paul的年龄,Paul的年龄在1~n之间,你每猜一个Paul会告诉你,你猜的这个数和他年龄的gcd,问在最坏情况下最少要猜多少次. 题解: 什么是最坏情况,我们直到如果他的年龄是1的话 ...

  3. 【经验】如何查看gcc、g++不加-std时的默认版本

    一.测试gcc 1.测试代码:c.c #include <stdio.h>int main(void) {#ifdef __STDC_VERSION__printf("__STD ...

  4. 用g ++编译C ++ 11

    本文翻译自:Compiling C++11 with g++ I'm trying to update my C++ compiler to C++11. 我正在尝试将我的C ++编译器更新为C ++ ...

  5. JOI-2016/17 春季合宿 切题记

    17年的合宿好难啊...感觉是我做过的最难的一套题(没有之一)了...但是可能也是价值最高的? Day1: T1 Cultivation:给你一个H*W的网格,有N<=300棵仙人掌.每一年可以 ...

  6. arm-linux-g++: command not found,解决Linux “g++: Command not found”报错问题 | 老左笔记

    周末的时候看到网友们都在折腾ServerStatus服务器监控工具,老左也看到cp同学留言说可以让我也折腾折腾,于是今天正好没其他事情就准备在测试机上玩玩.但是在编译make的时候看到有 " ...

  7. Not Found - GET https://registry.npmmirror.com/4.5.17 - [NOT_FOUND] 4.5.17 not found

    错误信息:Not Found - GET https://registry.npmmirror.com/4.5.17 - [NOT_FOUND] 4.5.17 not found 错误命令 >n ...

  8. Full_of_Boys训练1总结

    题目来源: 2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17) A. Arc ...

  9. python基础===Python 代码优化常见技巧

    Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...

最新文章

  1. 在线作图|如何绘制一个好看的堆叠柱状图
  2. MybatisPlus实现逻辑删除
  3. m1笔记本android开发,Apple M1设备开发Android小tips
  4. Python可以调用Gpu吗_python可以开发app吗
  5. Linux下安装spf13-vim
  6. 古代婚姻和现代社会矛盾了。导致大量大龄女性未婚
  7. 一个循环递归遍历问题
  8. mysql 日期与索引问题
  9. c语言递归思想实践-整形数组求极值问题
  10. 数据库范式(1 2 3 BCNF范式)详解
  11. 基于Python的指数基金量化投资 - 通过指数估值榜进行指数投资
  12. java isbn_JAVA ISBN10 ISBN13 正则表达式
  13. 1元课,学会小学数学应用题,你的孩子也能秒解“鸡兔同笼”
  14. PJSIP视频通话客户端
  15. Linux TC流量控制HOWTO中文版
  16. 在线语音合成 5-1
  17. 安装IE,出现“无法安装ie,因为其他程序或更新正在等待重新启动计算机。”解决方法。
  18. 2022年第二届中国高校大数据挑战赛A题探究
  19. Win软件 - 这可能是首款能在电脑上控制 iPhone 的工具
  20. 有赞android电话面试,挖财 / 有赞电话面试 题目分享

热门文章

  1. 软件测试实验报告下载 实验一到实验五
  2. 中国25个最“吓人”地名,看完都被吓笑了!
  3. 趣图:BAT程序员的一天对比
  4. 大数据教你实现预测未来,这不是梦
  5. 系统即将关机请保存关机是由nt_设置Windows电脑自动关机
  6. 川大计算机文化基础在线作业,川大1309《计算机文化基础0008》在线作业2答案.docx...
  7. linux mysql帮助文档,在 Linux 上安装 MySQL
  8. 数字调制系统工作原理_空间光调制器工作原理是什么 空间光调制器工作原理...
  9. 算法题目——多米诺骨牌问题(POJ-2663)
  10. redhat java 多个版本_Linux下安装JDK(多个版本) 切换