日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NEERC 17 G.The Great Wall

發(fā)布時間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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?1ysum=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<ysum=(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。