2018 徐州網路賽 G 題解
這題首先要倒著貼這樣 每次➕就好了 還有就是 資料太大需要離散化
然後建線段樹,根據x軸的座標建座標軸 ,看 這個點的 max(y) 有多大 如果 y[i]> max(y) 產生 貢獻 ans+=y[x]-max(x)
x軸同理
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000001
struct ac{
int x,y;
}b[maxn];
int a[maxn],lz[maxn],c[maxn];
int n,tot=1,t=1;
void updata(int x,int y,int l,int r,int va,int in){
if(x==l&&y==r){
c[in]=max(c[in],va);
lz[in]=max(lz[in],va);
return ;
}
int mid=(l+r)/2;
if(lz[in]){
c[in*2]=max(lz[in],c[in*2]);
c[in*2+1]=max(lz[in],c[in*2+1]);
lz[in*2]=max(lz[in],lz[in*2]);
lz[in*2+1]=max(lz[in],lz[in*2+1]);
lz[in]=0;
}
if(x>mid){
updata(x,y,mid+1,r,va,in*2+1);
}else if(y<=mid){
updata(x,y,l,mid,va,in*2);
}else{
updata(mid+1,y,mid+1,r,va,in*2+1);
updata(x,mid,l,mid,va,in*2);
}
c[in]=max(c[in*2],c[in*2+1]);
}
int query(int x,int l,int r,int in){
if(l==r){
return c[in];
}
int mid=(l+r)/2;
if(lz[in]){
c[in*2]=max(lz[in],c[in*2]);
c[in*2+1]=max(lz[in],c[in*2+1]);
lz[in*2]=max(lz[in],lz[in*2]);
lz[in*2+1]=max(lz[in],lz[in*2+1]);
lz[in]=0;
}
if(x>mid){
return query(x,mid+1,r,in*2+1);
}
return query(x,l,mid,in*2);
}
int main(){
cin>>n;
for(int j=1;j<=n;j++){
cin>>b[j].x>>b[j].y;
a[tot++]=b[j].x;
a[tot++]=b[j].y;
}
sort(a+1,a+tot);
for(int i=2;i<tot;i++)if(a[i]!=a[i-1])a[++t]=a[i];
long long ans=0;
memset(c,0,sizeof(c));
memset(lz,0,sizeof(lz));
int l=lower_bound(a+1,a+t+1,b[n].x)-a;
int r=lower_bound(a+1,a+t+1,b[n].y)-a;
ans+=a[r]+a[l];
//cout<<ans<<endl;
updata(1,l,1,t,r,1); // 把 1-x 全部更新成 y 的最大值(離散化之後是座標)
for(int j=n-1;j>=1;j--){
int l=lower_bound(a+1,a+t+1,b[j].x)-a;
int r=lower_bound(a+1,a+t+1,b[j].y)-a;
int i=query(l,1,t,1);
if(i<r){
ans+=a[r]-a[i];
}
int ll=1,rr=l;
int mi=1e9;
while(ll<=rr){ //我們要找比y小的最小的x 這樣才會有貢獻
int mid=(ll+rr)/2;
i=query(mid,1,t,1);
if(i<r){
mi=min(mi,mid); // 說明這個點的mid這個點的y < 當前j 點的y 可以產生貢獻取min(x)
rr=mid-1;
}else ll=mid+1;
}
if(mi!=1e9){
ans+=a[l]-a[ll-1];
}
updata(1,l,1,t,r,1);
}
cout<<ans<<endl;
}
相關文章
- ACM-ICPC 2018 徐州賽區網路預賽ACM
- ACM-ICPC 2018 徐州賽區網路預賽 I. Characters with Hash【簽到題】ACM
- ACM-ICPC 2018 徐州賽區網路預賽 F. Features TrackACM
- 2018 icpc徐州站網路賽 H Ryuji doesn't want to study
- ICPC2018徐州網路賽 H.Ryuji doesn't want to study ( 樹狀陣列陣列
- 第三屆華中地區邀請賽網路賽題解
- 2018華為網路技術大賽
- ACM-ICPC 2018 瀋陽賽區網路預賽ACM
- 2024ICPC網路賽第一場題解(部分)
- [題解]NOIP2018模擬賽 plutotree
- ACM-ICPC 2018 南京賽區網路預賽 __G Lpl and Energy-saving Lamps【線段樹+模擬】ACMLAMP
- zoj-4053(2018ICPC青島網路賽K題)啟發式分裂
- 2018icpc 南京網路賽L Magical Girl Haze
- 2024ccpc網路賽補題
- ACM-ICPC 2018 南京賽區網路預賽__B The writing on the wall【列舉】ACM
- 2013長沙網路賽H題Hypersphere (蛋疼的題目 神似邀請賽A題)
- 高校戰“疫”網路安全分享賽-部分PWN題-wp
- 2013成都網路賽 兩個簡單題
- 2018 瀋陽賽區網路預賽 I.Lattice's basics in digital electronics(模擬)Git
- ACM-ICPC 2018 南京賽區網路預賽__E AC Challenge【狀態壓縮+DP】ACM
- P3250 網路 題解
- 2013杭州網路賽C題HDU 4640(模擬)
- 2013長沙網路賽 E題(水題 有點小bug)
- 看雪CTF.TSRC 2018 團隊賽 第七題 『魔法森林』 解題思路
- 看雪CTF.TSRC 2018 團隊賽 第九題『諜戰』 解題思路
- 2018 北京賽區網路預選賽 A. Saving Tang Monk II(BFS+優先佇列)佇列
- ACM-ICPC 2018 南京賽區網路預賽__K The Great Nim Game【博弈論+費馬小定理+DP】ACMGAM
- “網際網路+”大學生創新創業大賽來了,歡迎報名龍蜥社群賽題!創業
- 5G網路
- 看雪CTF.TSRC 2018 團隊賽 第一題 『初世紀』 解題思路
- 看雪CTF.TSRC 2018 團隊賽 第二題 『半加器』 解題思路
- 看雪CTF.TSRC 2018 團隊賽 第五題 『交響曲』 解題思路
- 看雪CTF.TSRC 2018 團隊賽 第六題 『追凶者也』 解題思路
- 看雪CTF.TSRC 2018 團隊賽 第八題 『二向箔』 解題思路
- ACM-ICPC 2018 南京賽區網路預賽__J. Sum【尤拉篩法+質因子分解+思維】ACM
- 第 43 屆 ACM-ICPC 亞洲區域賽(徐州)現場賽名額分配規則及相關說明ACM
- 牛客網-2018年湘潭大學程式設計競賽:G 又見斐波那契程式設計
- 看雪CTF.TSRC 2018 團隊賽 第十題『俠義雙雄』 解題思路