Codeforce 1311 F. Moving Points 解析(思維、離散化、BIT、前綴和)

今天我們來看看CF1311F

題目連結

題目

略,請直接看原題。

前言

最近寫1900的題目更容易不看題解了,不知道是不是較少人\(AC\)的同難度題目會比較簡單。

想法

首先注意到,如果\(x\)座標上的前後兩點\(x_i,x_j\),\(x_i<x_j\),如果\(v[x_i]>v[x_j]\),不管\(v\)是正是負,兩點一定某個時候會重疊。反之,如果\(v[x_i]\le v[x_j]\),那麼我們就需要把答案加上\(x_j-x_i\)。

而我們可能會想到用\(BIT\)來維護\(:\)到某個\(x\)座標為止,小於等於某個速度的點有多少個。但是\(-10^8\le v_i\le10^8\)實在太大了,因此我們需要離散化\(v\),把範圍縮到至少\([1,n]\)。

但是我們可能會發現,我們不只需要維護小於等於某個速度的點有多少個,還需要知道這些點和目前看的點\(x_i\)的距離的和。

因此我們可以這樣做:首先把所有\(x_i\)減去最小的\(x\)值(也就是把\(x\)陣列平移到非負座標)。這樣一來\(BIT\)維護目前有\(r\)個點的速度小於等於\(v\),且這些點的\(x\)座標和為\(p\),那麼當我們考慮\(x_j\)這個點的時候(要去找有多少在\(x_j\)之前的點的速度比\(x_j\)的速度小),只需要把答案加上\(r\times x_j-p\)即可。

注意,本題\(x\)座標沒有排序,要自己先排序過。

且這題我的程式碼中的\(PII\)是\(pair<long\ long,long\ long>\)

程式碼:

const int _n=2e5+10;
int t,n,minn=1e9;
VI vv;
PII s[_n];
namespace BIT{
int nn;PII t[_n];
void update(int x,int val){while(x<=nn)t[x].fi+=val,t[x].se++,x+=(x&-x);}
//這模板是1-base,而且update是把修改量加上去
PII query(int x){PII res={0,0};while(x>0){res.fi+=t[x].fi,res.se+=t[x].se,x-=(x&-x);}return res;}
void init(int n_){nn=n_;}
}
main(void) {cin.tie(0);ios_base::sync_with_stdio(0);
cin>>n;rep(i,1,n+1){cin>>s[i].fi;minn=min(minn,s[i].fi);}rep(i,1,n+1){cin>>s[i].se;vv.pb(s[i].se);}
sort(s+1,s+n+1);sort(all(vv));int nn=unique(all(vv))-vv.begin();
rep(i,1,n+1)s[i].se=lower_bound(vv.begin(),vv.begin()+nn,s[i].se)-vv.begin()+1;
rep(i,1,n+1)s[i].fi-=minn;
BIT::init(nn); ll ans=0;
rep(i,1,n+1){
PII res=BIT::query(s[i].se);
ans+=1ll*s[i].fi*res.se-res.fi;
BIT::update(s[i].se,s[i].fi);
}cout<<ans<<'\n';
return 0;
}

標頭、模板請點Submission看

Submission

F. Moving Points 解析(思維、離散化、BIT、前綴和)的更多相关文章

  1. D. Rescue Nibel! 解析(思維、組合、離散化、差分)

    Codeforce 1420 D. Rescue Nibel! 解析(思維.組合.離散化.差分) 今天我們來看看CF1420D 題目連結 題目 給你\(n\)個區間,求有幾種方法使得\(k\)個區間的 ...

  2. E. Enemy is weak 解析(思維、離散化、BIT、線段樹)

    Codeforce 61 E. Enemy is weak 解析(思維.離散化.BIT.線段樹) 今天我們來看看CF61E 題目連結 題目 給一個數列\(a\),求有多少\((i,j,k)\),\(i ...

  3. F. Make It Connected 解析(思維、MST)

    Codeforce 1095 F. Make It Connected 解析(思維.MST) 今天我們來看看CF1095F 題目連結 題目 給你\(n\)個點,每個點\(u\)還有一個值\(a[u]\ ...

  4. A. Peter and Snow Blower 解析(思維、幾何)

    Codeforce 613 A. Peter and Snow Blower 解析(思維.幾何) 今天我們來看看CF613A 題目連結 題目 給你一個點\(P\)和\(n\)個點形成的多邊形(照順或逆 ...

  5. C. k-Amazing Numbers 解析(思維)

    Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...

  6. E. Tree Queries 解析(思維、LCA)

    Codeforce 1328 E. Tree Queries 解析(思維.LCA) 今天我們來看看CF1328E 題目連結 題目 給你一棵樹,並且給你\(m\le2e5\)個詢問(包含\(k\)個點) ...

  7. E. Xenia and Tree 解析(思維、重心剖分)

    Codeforce 342 E. Xenia and Tree 解析(思維.重心剖分) 今天我們來看看CF342E 題目連結 題目 給你一棵樹,有兩種操作,把某點標成紅色或者查詢離某點最近的紅點有多遠 ...

  8. D. New Year Santa Network 解析(思維、DFS、組合、樹狀DP)

    Codeforce 500 D. New Year Santa Network 解析(思維.DFS.組合.樹狀DP) 今天我們來看看CF500D 題目連結 題目 給你一棵有邊權的樹,求現在隨機取\(3 ...

  9. B. Game of the Rows 解析(思維)

    Codeforce 839 B. Game of the Rows 解析(思維) 今天我們來看看CF839B 題目連結 題目 有如下圖片所示的飛機座位\(n\)排,和\(k\)隊士兵,每隊數量不一定. ...

随机推荐

  1. O、Θ、Ω

    1.这些是时间复杂度的.(e.g. O(n).Θ(n).Ω(n)) 主要为主定理(坏东西) 2.本质 O <= Θ = Ω >=

  2. xss利用——BeEF#stage3(绕过同源策略与浏览器代理)

    绕过同源策略 正式进入攻击阶段.因为SOP(同源策略)的存在,BeEF只能对被勾子钩住的页面所在域进行操作.如果有办法绕过SOP,那么无疑会使攻击面放大. 绕过SOP可从两方面入手.第一个是从浏览器本 ...

  3. 小白也能看懂的Redis教学基础篇——redis神秘的数据结构

    各位看官大大们,周末好! 作为一个Java后端开发,要想获得比较可观的工资,Redis基本上是必会的(不要问我为什么知道,问就是被问过无数次).那么Redis是什么,它到底拥有什么神秘的力量,能获得众 ...

  4. 智慧矿山-选矿工艺数字 3D 可视化

    前言 现代科技和工业的发展对矿物原料的要求越来越高,直接开采的原矿石往往达不到标准,而原矿通过选矿加工后则可以满足要求.选矿技术在冶金.煤炭.化工.建材和环保等部门都得到应用,对国民经济的发展意义重大 ...

  5. Python numpy总结(3)——常用函数用法

    1,np.ceil(x, y) 限制元素范围,进一法,即向上取整. x 表示输入的数据  y float类型 表示每个元素的上限. a = np.array([-1.7, -1.5, -0.2, 0. ...

  6. 【题解】CF375D Tree and Queries

    Link \(\text{Solution:}\) 讲实话这题有点烦,不知道为啥改了下\(\text{dfs}\)就过了--原版本\(dfs\)好像没啥错啊-- 其实对于子树问题,我们求出原来树的\( ...

  7. Spring Boot第七弹,别再问我拦截器如何配置了!!!

    持续原创输出,点击上方蓝字关注我吧 前言 上篇文章讲了Spring Boot的WEB开发基础内容,相信读者朋友们已经有了初步的了解,知道如何写一个接口. 今天这篇文章来介绍一下拦截器在Spring B ...

  8. 使用Android进行VR图像处理

    Source code at GitHub 介绍 VR或360图像,可以在耳机或在像谷歌街景这样的网站上观看是标准的JPG图像.你可以使用简单的Android图形处理技术,通过单独的移动设备或内部运行 ...

  9. springboot利用redis做缓存

    首先 配置redis redis: password: 123456 host: 127.0.0.1 port: 6379 #103.249.252.109:10086 expireSeconds: ...

  10. Netty之网络编程数据编码

    一.概况 我们在进行网络编程中会把各种数据转换为byte数据以便能在网络上传输,最常见的网络字节序--Little-Endian和Big-Endian,也让好多初进网络编程的新手摸不着头脑,还有按位或 ...