NEERC 17 G.The Great Wall
生活随笔
收集整理的這篇文章主要介紹了
NEERC 17 G.The Great Wall
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
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,可以簡單地用二維數(shù)點解決。
- 當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,同樣可以簡單地用二維數(shù)點解決。
時間復(fù)雜度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; }總結(jié)
以上是生活随笔為你收集整理的NEERC 17 G.The Great Wall的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 加盟店铺管理门道多,国内十大加盟店管理软
- 下一篇: NEERC13 Problem H.Ha