逆序數技巧 - 牛客

鏈接:https://ac.nowcoder.com/acm/contest/308/D
來源:牛客網

題目描述

tokitsukaze給你一個長度為n的序列,這個序列是1到n的一種排列。
然后她會進行q次操作。每次操作會給你L R k這三個數,表示區間[L,R]往右移動k次。
移動一次的定義是:一個數的位置是P(L≤P≤R-1),它往右移動后就會在P+1這個位置上;如果一個數在R這個位置,它會移動到L這個位置。
在每次操作結束后,tokitsukaze想讓你算出現在這個序列的逆序數的多少,簡單起見,你只需要告訴她現在這個序列的逆序數是奇數還是偶數就行了。
提示:序列的逆序數指的是:a[i]>a[j](i<j),滿足條件的(i,j)的個數。

輸入描述:

第一行包括一個正整數n(1≤n≤10^5)。
接下來一行,包括一個長度為n的序列,序列為1到n的一種排列。
第三行包括一個正整數q(1≤q≤10^5)。
接下來q行,每行包括三個正整數L,R,k(1≤L≤R≤n,1≤k≤10^9)。
所有變量的含義題面均有給出。

輸出描述:

在每次操作后,逆序數如果是奇數,就輸出1,如果是偶數,就輸出0。
示例1

輸入

復制
4
2 3 1 4
3
1 3 2
2 4 1
2 3 1

輸出

復制
0
0
1

說明

原序列為:2 3 1 4
第一次操作后,序列變為:3 1 2 4,逆序數為2,所以答案為0。
第二次操作后,序列變為:3 4 1 2,逆序數為4,所以答案為0。
第三次操作后,序列變為:3 1 4 2,逆序數為3,所以答案為1。

題意 : 每次選擇一個區間循環變換, 求整個串的逆序數是奇數還是偶數
思路分析 :
  首先可以很容易求出整個序列的逆序數是多少,然后循環移位某一個區間時,會有個小特點就是,移動一步時,逆序數變化只會取決于他前面可操作區間的長度,,若其為偶數,則逆序數的奇偶不會發生變化,否則會產生變化。

代碼示例 :
  
int n;
int a[maxn];
int l, r, k;
int c[maxn];
int lowbit(int x){return x&(-x);}
void add(int pos){for(int i = pos; i <= n; i += lowbit(i)){c[i] += 1;}
}
int query(int pos){int res = 0;for(int i = pos; i ; i -= lowbit(i)){res += c[i];}return res;
}
int ans = 0;
void solve() {for(int i = 1; i <= n; i++){add(a[i]);ans += i-query(a[i]);ans = ans&1;}
}int main() {//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);cin >> n;for(int i = 1; i <= n; i++) scanf("%d", &a[i]);int q;solve();//printf("+++++ %d \n", ans);cin >> q;while(q--){scanf("%d%d%d", &l, &r, &k);k = k % (r-l+1);int len = (r-l)*k;if (len&1) ans += 1;ans = ans&1;printf("%d\n", ans);}return 0;
}

?


  

轉載于:https://www.cnblogs.com/ccut-ry/p/10087216.html

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

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

相關文章

Ajax跨域提交JSON和JSONP

可以直接使用$.getJSON()方法實現跨域請求&#xff0c;參數中必須加上callback&#xff0c;如&#xff1a; var jsonpUrl http://www.test.com/index.php?cApi_Order&aAddOrder&callback?;var param {uid:uid,type:type,cityId:cityId};$.getJSON(jsonpUrl, param,…

mysql數據庫商業版與社區版的區別

1、商業版本組織管理與測試環節控制更嚴格&#xff0c;穩定性方面&#xff0c;會比社區版本更穩定。 2、mysql是成熟產品&#xff0c;商業版與社區版之間性能方面相差不大。 3、商業版不遵守GPL協議&#xff0c;社區版遵守GPL協議可以免費使用。 4、使用商業版后可以購買相關的…

UML的奧妙 - 學習UML筆記(1)

前兩天買了一本《大象 Thinking in UML》&#xff0c;其實本就有學習UML的念頭&#xff0c;但都因這樣那樣的事兒耽擱了&#xff0c;當然&#xff0c;也有些惰性在作祟...... 閑話少說&#xff0c;這本書看完了一章&#xff0c;發現還是不錯的&#xff0c;先把這兩天的學習情況…

無法檢查指定的位置是否位于cfs上_(干貨分享)一文搞明白 節氣門位置傳感器的作用、故障類型與癥狀、診斷方法...

1 位置節氣門位置傳感器(ThrottlePositionSensor&#xff0c;TPS)&#xff0c;位于節氣門體上&#xff0c;其安裝形式因節氣門結構的不同而有所差異&#xff1a;對于傳統的機械拉索式節氣門&#xff0c;節氣門位置傳感器通常以一個獨立元件的形式安裝在節氣門體的側面&#xf…

盒子模型

1 <!doctype html>2 <html>3 <head>4 <title>盒子模型</title>5 <meta charset"utf-8">6 <meta name"keywords", content"">7 <meta name"description&…

表單跨域提交

利用form表單跨域post 現在ajax應用這么廣泛&#xff0c;一般的應用都是直接通過異步調用就可以了&#xff0c;但是有些東西必須要使用post&#xff0c;而且是跨域的時候&#xff0c;ajax異步調用的方式就無能為力了。當然現在也有很多種辦法&#xff0c;比如通過flash中轉去po…

Asp.net(C#)-顯示所有緩存 清除所有緩存

//清除所有緩存protectedvoidRemoveAllCache() { System.Web.Caching.Cache _cache HttpRuntime.Cache; IDictionaryEnumerator CacheEnum _cache.GetEnumerator(); ArrayList al new ArrayList(); while (CacheEnum.MoveNext()) { …

mysql數據庫三大引擎優缺點

1.MyISAM 特性&#xff1a; ①不支持事務。 ②表級鎖定&#xff0c;并發性能大大降低。 ③讀寫互相阻塞。 適用場景&#xff1a; ①不支持事務。 ②并發相對較低&#xff0c;表鎖定。 ③執行大量select語句操作的表。 ④count(*)操作較快。 ⑤不支持外鍵。 注&#xff1a;查詢速…

Python--day60--一個簡單(不完整)的web框架

轉載于:https://www.cnblogs.com/xudj/p/10091775.html

activemq 發兩條只收到一條_淺談ActiveMQ與使用

更多大數據架構、實戰經驗&#xff0c;歡迎關注【大數據每日嗶嗶】&#xff0c;期待與你一起成長&#xff01;本文將介紹一下 ActiveMQ 的安裝、原理和簡單實戰。一、什么是消息中間件消息中間件顧名思義實現的就是在兩個系統或兩個客戶端之間進行消息傳送二、什么是ActiveMQAc…

php發送get、post請求的幾種方法

方法1: 用file_get_contents 以get方式獲取內容 <?php $urlhttp://www.domain.com/; $html file_get_contents($url); echo $html; ?>方法2: 用fopen打開url, 以get方式獲取內容<?php $fp fopen($url, r); stream_get_meta_data($fp); while(!feof($fp)) { $res…

ZZ:深入理解new

new的過程當我們使用關鍵字new在堆上動態創建一個對象時&#xff0c;它實際上做了三件事&#xff1a;獲得一塊內存空間、調用構造函數、返回正確的指針。當然&#xff0c;如果我們創建的是簡單類型的變量&#xff0c;那么第二步會被省略。假如我們定義了如下一個類A&#xff1a…

mysql數據庫的優缺點

優點1. 通常存儲過程 標題有助于提高應用程序的性能。因為當你創建他的時候就已經編譯了&#xff0c;只不過是按需編譯的。2.存儲過程有助于減少應用程序和數據庫服務器之間的流量&#xff0c;因為應用程序不必發送多個冗長的SQL語句&#xff0c;而只能發送存儲過程的名稱和參數…

大數據小白系列——HDFS(1)

【注1&#xff1a;結尾有大福利&#xff01;】 【注2&#xff1a;想寫一個大數據小白系列&#xff0c;介紹大數據生態系統中的主要成員&#xff0c;理解其原理&#xff0c;明白其用途&#xff0c;萬一有用呢&#xff0c;對不對。】 大數據是什么&#xff1f;拋開那些高大上但籠…

PHP檢測遠端文件是否存在

簡單解釋一下上面的代碼。get_headers的作用就是訪問一個遠程地址&#xff0c;把服務器發送的HTTP頭以數組形式返回。而$header[0]則是服務器返回的狀態碼&#xff08;如果不出意外的話狀態碼應該都是第一個返回的&#xff09;。 要確定一個文件在遠端服務器上存在&#xff0c…

C#中使用DTS來導入數據及相關問題

向Sql 中導入Excel數據時&#xff0c;使用MS SQL的DTS功能 可以很方便的導入&#xff0c;同時引用Dll文件&#xff0c;可以在程序中對導入過程進行控制。 創建DTS包的過程如下&#xff1a; &#xff11;。在&#xff33;&#xff31;&#xff2c;企業管理器中&#xff0c;工具菜…

html select選擇事件_一道搜狗面試題:IO多路復用中select、poll、epoll之間的區別...

(1)select>時間復雜度O(n)它僅僅知道了&#xff0c;有I/O事件發生了&#xff0c;卻并不知道是哪那幾個流(可能有一個&#xff0c;多個&#xff0c;甚至全部)&#xff0c;我們只能無差別輪詢所有流&#xff0c;找出能讀出數據&#xff0c;或者寫入數據的流&#xff0c;對他們…

【MySQL】redo log --- 刷入磁盤過程

1、redo log基本概念 redo log的相關概念這里就不再過多闡述&#xff0c;網上有非常多的好的資料&#xff0c;可以看下縹緲大神的文章&#xff1a;https://www.cnblogs.com/cuisi/p/6525077.html&#xff0c;個人感覺介紹的非常詳細。 2、數據更改過程簡述 MySQL 在更新數據的時…

WPF DataGrid根據內容設置行顏色

轉&#xff1a; https://code.4noobz.net/wpf-change-color-of-a-row-in-a-datagrid-depending-on-the-value/ 轉載于:https://www.cnblogs.com/Mindy-hym/p/11475024.html

QQ web api

QQ的很多功能和信息可以通過web方式獲得&#xff5e;以下鏈接&#xff0c;星號應換成你要查詢的QQ號一、Activities Previewhttp://labs.qq.com/ie8/preview/?uin******二、QQ空間訪問次數查詢&#xff08;需權限&#xff09;http://g.qzone.qq.com/fcg-bin/cgi_emotion_list.…