ACM-ICPC 2018 徐州賽區網絡預賽 I. query 樹狀數組

I. query

題目鏈接:

Problem Description

Given a permutation \(p\) of length \(n\), you are asked to answer \(m\) queries, each query can be represented as a pair \((l ,r )\), you need to find the number of pair \((i ,j)\) such that \(l \le i < j \le r\) and \(\min(p_i,p_j) = \gcd(p_i,p_j )\).

Input

There is two integers \(n(1 \le n \le 10^5)\), \(m(1 \le m \le 10^5)\) in the first line, denoting the length of \(p\) and the number of queries.

In the second line, there is a permutation of length \(n\), denoting the given permutation \(p\). It is guaranteed that \(p\) is a permutation of length \(n\).

For the next \(m\) lines, each line contains two integer \(l_i\) and \(r_i(1 \le l_i \le r_i \le n)\), denoting each query.

Output

For each query, print a single line containing only one integer which denotes the number of pair \((i,j)\).

樣例輸入

3 2
1 2 3
1 3
2 3

樣例輸出

2
0

題意

給你一個序列,求很多段子區間\((l ,r )\)滿足\(l \le i < j \le r\) and \(\min(p_i,p_j) = \gcd(p_i,p_j )\) 的個數。

題解

1.轉化一下就是求一個區間有多少對滿足一個是另一個的倍數。

2.我們會發現這個是一個排列,每個數x的倍數個數為\(\frac{n}{x}\),那么所有的倍數個數即為\(\sum_{i=1}^{n}\frac{n}{i})(\le nlog_{2}{n+1})\)

3.我們將所有倍數點對預處理出來,問題就變成了問一個區間有多少倍數點對同時存在。

4.是不是很熟悉啦(不知道也沒關系),我來細細講解一下:

  • 先將區間按右端點從小到大排序,保證右端點單調遞增
  • 那么起作用的就是左端點,這是我們碰到一個點就將它左邊的所有是它約數以及倍數的位置權值全部+1,這樣如果左邊這個點在區間里,右端點必然也在區間里因為右端點單調遞增。

如果真的理解了的話想想按左端點從大到小也可以做,想想怎么做?

其實這題是cf原題,網絡賽時我不會做,然后竟然搜到了原題(還是有極其微小的差異),然后現學啦,哈哈哈。

cf鏈接:codeforces 301D

代碼

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x7f7f7f7f
#define N 100050
template<typename T>void read(T&x)
{ll k=0; char c=getchar();x=0;while(!isdigit(c)&&c!=EOF)k^=c=='-',c=getchar();if (c==EOF)exit(0);while(isdigit(c))x=x*10+c-'0',c=getchar();x=k?-x:x;
}
void read_char(char &c)
{while(!isalpha(c=getchar())&&c!=EOF);}
int n,m,a[N],p[N],c[N],ans[N];
vector<int>vec[N];
struct Query
{int l,r,id;bool operator <(const Query b)const{return r<b.r;}
}que[N];
void change(int x){while(x<=n)c[x]++,x+=x&-x;}
int ask(int x){int ans=0;while(x)ans+=c[x],x-=x&-x;return ans;}
void work()
{read(n); read(m);for(int i=1;i<=n;i++) read(a[i]),p[a[i]]=i;for(int i=1;i<=m;i++) read(que[i].l),read(que[i].r),que[i].id=i;for(int i=1;i<=n;i++){for(int j=a[i]+a[i];j<=n;j+=a[i])if (i<p[j])vec[p[j]].push_back(i);else vec[i].push_back(p[j]);}sort(que+1,que+m+1);int r=0;for(int i=1;i<=m;i++){for(int j=r+1;j<=que[i].r;j++)for(int k=0;k<vec[j].size();k++)change(vec[j][k]);r=que[i].r;ans[que[i].id]=ask(que[i].r)-ask(que[i].l-1);}for(int i=1;i<=m;i++)printf("%d\n",ans[i]);
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("aa.in","r",stdin);
#endifwork();
}

轉載于:https://www.cnblogs.com/mmmqqdd/p/11508422.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447828.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447828.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447828.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

內容分發網絡(CDN) 是什么

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 技術原理解說見另一文&#xff1a;https://blog.csdn.net/jiangyu1013/article/details/88795690 內容分發網絡 &#xff08;英語&…

7種方法讓你養出干凈的肺

世界衛生組織(WHO)近日公布的全球1081個城市采集的空氣質量數據顯示&#xff0c;空氣中可吸入顆粒物(PM10)含量最少的前50個城市幾乎被加拿大和美國包攬。中國北京&#xff0c;蘭州等城市都是重災區。生活在很多大中型城市&#xff0c;除了空氣污染外&#xff0c;香煙、油煙、工…

CDN 的作用與基本過程

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 技術原理解說也可參見另一文&#xff1a;https://blog.csdn.net/jiangyu1013/article/details/88795690 1.簡介 CDN&#xff0c;Content …

2019南昌網絡賽  I. Yukino With Subinterval 樹狀數組套線段樹

I. Yukino With Subinterval題目鏈接&#xff1a; Problem Descripe Yukino has an array \(a_1, a_2 \cdots a_n\). As a tsundere girl, Yukino is fond of studying subinterval. Today, she gives you four integers $l, r, x, y $, and she is looking for how many diffe…

健康丨汗從哪里出 病從哪里來

1.額頭出汗肝陽上亢如果額頭常常出很多汗&#xff0c;中醫認為可能是肝陽上亢引起的。建議你去醫院檢查一下甲狀腺激素分泌是否正常&#xff0c;因為這很可能是甲狀腺激素分泌過剩造成的。  醫師建議&#xff1a;平時盡量保持心境平和&#xff0c;少生氣&#xff0c;女人尤其…

CDN(內容分發網絡)技術原理

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 前言 Internet的高速發展&#xff0c;給人們的工作和生活帶來了極大的便利&#xff0c;對Internet的服務品質和訪問速度要求越來越高…

3.0 go mod之遠程倉庫搭建-代碼示例

注意事項 所謂的遠程倉庫指的是github&#xff0c;個人首次使用go mod在其他云倉庫上嘗試&#xff0c;并未成功&#xff0c;這浪費了我近2小時的時間&#xff1b; 如果你是初次嘗試&#xff0c;那么除了github的地址換一下之外&#xff0c;其他的都按照示例操作&#xff0c;比如…

視界云:CDN{內容分發網絡} 知識詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 CDN 全稱:Content Delivery Network或Content Ddistribute Network&#xff0c;即內容分發網絡 基本思路&#xff1a; 盡可能避開互聯…

2019牛客多校第七場E Find the median 權值線段樹+離散化

Find the median題目鏈接&#xff1a; https://ac.nowcoder.com/acm/contest/887/E 題目描述 Let median of some array be the number which would stand in the middle of this array if it was sorted beforehand. If the array has even length let median be smallest of …

男人腎虛的8大表現

導語&#xff1a;腎虛是一種常見的現象。尤其是男人&#xff0c;最害怕的就是腎虛。男人的了腎虛怎么辦&#xff0c;腎虛主要都有哪些癥狀。下面專家給大家介紹一下男人腎虛的幾種表現&#xff1a; 一、畏寒肢冷 “畏寒”指有怕冷而且怕風吹的感覺。“肢冷”指四肢手足冰冷&…

更改 nginx 默認端口 ( ubuntu、linux )

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 我想讓一個demo 站點直接域名訪問&#xff0c;不帶端口&#xff0c;所以想用 80 端口啟動對應前端工程。 發現 80 被 nginx 占用&a…

怎么更改Rstudio中的默認目錄

方法一、 每次啟動Rstudio之后&#xff0c;執行代碼 setwd("F:/R/R_data")默認目錄就會修改為雙引號內的位置路徑。 方法二、 對Rstudio進行設置一次即可。 ①點擊Tools&#xff0c;打開Global Options. ②將位置設置完畢&#xff0c;點擊 Apply 確認即可。 ③Rstudi…

職場十個方法 讓專業氣質成為你的符號!

1、任何時候都要準時。   上班或是開會的時候遲到&#xff0c;都會給別人一種你對工作不夠認真的印象。所以請一定要多多注意時間的問題。當然你要注意的不僅僅是開始的時間&#xff0c;還有午休結束的時間&#xff0c;可不要貪圖幾分鐘的自由&#xff0c;棄你的專業氣質于不…

docker 虛懸鏡像 ( 懸空鏡像 ) :鏡像沒有倉庫名或沒有標簽

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 我們在build鏡像的過程中&#xff0c;可能會產生一些臨時的不具有名稱也沒有作用的鏡像他們的名稱一般都是<none>, 我們可以執…

R-apply()函數

創建一個列表變量&#xff0c;它的第一個元素包含所有從0到9的平方數&#xff0c;第二個元素為10到19之內的所有平方數&#xff0c;依此類推&#xff0c;最后一個元素為90到99之內的平方數。沒有平方數的元素也應該被包含在內&#xff01; 學習網友的解題思路&#xff0c;用的是…

編程興趣真的是由“熱情”驅動的嗎?

當我告訴人們我以寫代碼為生時&#xff0c;他們翻著白眼問我編程是不是特無聊&#xff1f;有許多編程博客告訴我們&#xff0c;如果你想要精于編程&#xff0c;那么就必須先熱愛編程。那么&#xff0c;這是不是意味著如果沒有激情&#xff0c;那你就寫不出一行代碼&#xff1f;…

心生想往 ... ...

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 連日里的忙碌 ... 終又忍不住開始想往 ... 聽著歌兒 放縱篇篇翻飛思緒 ... 拋下紛繁的朝九晚六和所有加班&#xff0c;于每一日&#…

C# 打開文件/跳轉鏈接

mark一下~ 打開文件 1.打開文件夾&#xff1a; System.Diagnostics.Process.Start(FolderPath);-- 打開文件夾 System.Diagnostics.Process.Start(FolderPath"/"FileName); -- 打開文件夾中某個文件 2.用IE打開文件: System.Diagnostics.Process.Start("Explore…

身體曲線如何反映出健康

站在鏡子前&#xff0c;看看自己的身材&#xff0c;是否勻稱優美?身體曲線不僅是美和丑的象征&#xff0c;同時還能夠反映出你的健康狀況。 1.腿細 有些人四肢纖細或運動后易酸痛&#xff0c;可能意味著肌肉少、力量弱。多項研究表明&#xff0c;肌肉與健康狀況及壽命都存在…

路的盡頭 ...

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一直一直的 想要有一個只屬于自己的地方&#xff0c;或許可以說不只是一個地方&#xff0c;我想要的是一個叫作家的地方... 每每看到溫…