codeforces 261 D

題目鏈接:

解題報告:給出一個序列a1,a2,a3.........an,f(i , j ,x) ak 等于x的個數(i <= k <= j),令i < j,求有多少對 i 和 j 使得 f(1,i,ai) > f(j,n,aj)。

從左往右掃一遍這個序列,num1[i] 等于從1到i有多少個等于a[i]的,同理從右往左掃一遍得到num2[i],然后把從右往左掃的num2[i]的個數用一個樹狀數組維護,先全部加到樹狀數組里面去,然后從左往右掃一遍num1[i],每次判斷在num2中有多少個小于num1[i]的數,同時判斷完之后要把對應的num2[i]的個數減去1,因為這時候num1[i]的位置已經超過這個num2的位置了,所以以后的算個數的時候這個num2[i]不能算進去,應該刪掉。用樹狀數組的目的就是為了能快速判斷num2[i]中有多少個小于num1[i]的,這樣可以做到在log2(n)的時間內完成查找和刪除操作。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<map>
 5 #include<algorithm>
 6 using namespace std;
 7 #define LL long long
 8 #define maxn 1000005
 9 LL n,tot;
10 map<LL,LL> mp1,mp2;
11 LL a[maxn],num1[maxn],num2[maxn],num3[maxn];
12 LL tree[maxn];
13 LL find(LL d,int l,int r)
14 {
15     while(l < r)
16     {
17         int mid = (l + r) / 2;
18         if(d <= num1[mid]) r = mid;
19         else l = mid + 1;
20     }
21     if(num1[l] != d) return l - 1;
22     else return l;
23 }
24 void insert(int l,int d)
25 {
26     for(int i = l;i <= n;i += (-i & i))
27     tree[i] += d;
28 }
29 LL sum(int l)
30 {
31     LL tot = 0;
32     for(int i = l;i > 0;i -= (-i & i))
33     tot += tree[i];
34     return tot;
35 }
36 
37 int main()
38 {
39     
40     while(scanf("%lld",&n)!=EOF)
41     {
42         for(int i = 1;i <= n;++i)
43         scanf("%lld",&a[i]);
44         memset(tree,0,sizeof(tree));
45         memset(num1,0,sizeof(num1));
46         memset(num2,0,sizeof(num2));
47         mp1.clear();
48         mp2.clear();
49         for(int i  = 1;i <= n;++i)
50         {
51             if(mp1.insert(pair<LL,LL> (a[i],1)).second == 1)
52             num1[i] = 1;
53             else
54             {
55                 mp1[a[i]] = mp1[a[i]] + 1;
56                 num1[i] = mp1[a[i]];
57             }
58         }
59         for(int i = n;i >= 1;--i)
60         {
61             if(mp2.insert(pair<LL,LL> (a[i],1)).second == 1)
62             num2[i] = 1;
63             else
64             {
65                 mp2[a[i]] = mp2[a[i]] + 1;
66                 num2[i] = mp2[a[i]];
67             }
68         }
69         for(int i = 1;i <= n;++i)
70         insert(num2[i],1);
71         tot = 0;
72         for(int i = 1;i <= n;++i)
73         {
74             insert(num2[i],-1);
75             tot += sum(num1[i]-1);
76         }
77         printf("%lld\n",tot);
78     }
79     return 0;
80 }
View Code

?

轉載于:https://www.cnblogs.com/xiaxiaosheng/p/3916290.html

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

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

相關文章

javascript下漢字和Unicode編碼互轉代碼

近日在為網站做一資料功能&#xff0c;這些顯示在頁面上面的文字數據都是存放在js文件裏面的&#xff0c;由於這些js文件裏面的中文都是經過unicode編碼的&#xff0c;頁面上顯示是沒有問題的&#xff0c;問題是我做的網站是繁體中文&#xff0c;而js文件裏面的中文數據是簡體中…

python 線程異步執行踩坑

有個需求&#xff0c;一個線程在得到n個數據之后&#xff0c;異步地執行一個子線程函數&#xff0c;在子線程函數中完成數據庫的打開、寫入數據、關閉操作。在子線程函數返回前父線程先返回結果。 在此之前&#xff0c;先導入我們需要的模塊&#xff1a; from concurrent.futu…

關于window.history.back()后退問題

Windows下的window.history.back()后退后返回的不僅僅是前一個頁而是前一個頁的狀態。假設一個頁我改動了3次那必須后退3次才干回到前一個頁。并且數據庫中刪除的數據依舊顯示在上面感覺很的不有用。 解決的方法&#xff1a;history.back()后再加一個reload()這樣就能夠回到刷新…

每日英語:Smog Levels in Hong Kong Hit Highs

Hong Kong’s pollution levels hit nearly decade-level highs this week, sending locals scurrying inside and obscuring the city’s skyline behind a blanket of white. scurry&#xff1a;急跑&#xff0c;急趕    In the city’s central business district, road…

轉載 | pymysql.err.InterfaceError: (0, ‘‘)解決辦法

導致這個錯誤的原因是通過pymysql連接MySQL&#xff0c;沒有關閉連接的操作&#xff0c;所以短時間內不會出問題&#xff0c;長時間保持這個連接會出現連接混亂。雖然看著自己的代碼沒錯&#xff0c;還是會報 pymysql.err.InterfaceError: (0, ‘’)錯誤。所以這個連接要么連上…

不使用物理引擎,自己動手做真實物理的模擬投籃游戲

最近打算做一個2D投籃游戲&#xff0c;由于對于BOX2D等物理引擎并不熟悉&#xff0c;加之一開始低估了游戲所需要的碰撞檢測復雜度&#xff0c;認為僅僅涉及4面墻&#xff0c;籃球&#xff0c;籃板&#xff0c;籃筐&#xff0c;籃網的碰撞檢測并不復雜。因此決定自己實現所需要…

GoldenGate DDL雙向復制

繼續上一篇的實驗。 節點說明&#xff1a; dd1(源庫)--->>kf2(目標庫) dd1(目標庫)<<---kf2(源庫) 在配置反向復制過程中&#xff0c;可暫時把源庫和目標庫調換位置&#xff0c;配置基本上雷同。 但在官網上有說明要注意的一個地方&#xff1a; Do ei…

轉載|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0

原文鏈接&#xff1a;https://www.cnblogs.com/heiao10duan/p/9373237.html 原因&#xff1a; 使用了多線程&#xff0c;多線程共享了同一個數據庫連接&#xff0c;但每個execute前沒有加上互斥鎖 方法&#xff1a; 方法一&#xff1a;每個execute前加上互斥鎖 lock.acquire…

JSF入門

1. 簡介 JSF技術是Sun公司在2004年發布的用于開發Web應用的框架。當前版本是2.2&#xff0c;由JSR344規范定義。它是Java EE 7推薦的Web標準框架。Mojarra(https://javaserverfaces.java.net/)是Oracle官方采用的JSF的參考實現&#xff0c;其他的參考實現還有Apache基金的MyFac…

nyist 488 素數環

有一個整數n&#xff0c;把從1到n的數字無重復的排列成環&#xff0c;且使每相鄰兩個數&#xff08;包括首尾&#xff09;的和都為素數&#xff0c;稱為素數環。 為了簡便起見&#xff0c;我們規定每個素數環都從1開始。例如&#xff0c;下圖就是6的一個素數環。 這題在進行判斷…

Android System分區大小異常

平臺&#xff1a;Freescale &#xff0f; Android 4.2.2 問題描述&#xff1a; 用 df 命令&#xff0c;看到/system分區大小275M。 用 busybox fdisk -l /dev/block/mmcblk0p5&#xff0c;看到 536M。 Freescale的刷機工具是Mfgtool&#xff0c;分區的動作在mksdcard-android.s…

python數據庫連接池使用

在轉載|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0這一篇中&#xff0c;我使用了方法一。接下來試試方法三&#xff0c;方法三和方法二其實意義差不多&#xff0c;但是對于數據庫的連接并不是交由程序員管理而是交由連接池管理了&#xff0…

.Net入門-部署問題

學習一門新的語言難免會遇到各種各樣的問題&#xff0c;總結一下。 測試環境&#xff1a;windows2008serverIIS7 開發環境: vs2010 問題1&#xff1a;"Unrecognized attribute targetFramework. Note that attribute names are case-sensitive. " 分析&#xff1a; 開…

pymysql.err.OperationalError: (1203, “User root already has more than ‘max_user_connections‘ active

max_connections 是指MySQL服務器的最大連接數。即所有用戶最大連接數的和。 max_user_connections 是指MySQL中單個用戶的最大連接數。 這里說明當前用戶的連接數大于了單個用戶的最大連接數&#xff0c;需要擴大連接數&#xff1a; mysql> show variables like %connect%…

北京行——JSP入門與Servlet精通

Servlet技術 用來動態生成 網頁數據資源Servlet生成HTML 頁面數據時&#xff0c;所有內容都是通過 response.getWriter response.getOutputStream 向瀏覽器輸出的 <html> <head> </head> <body> Hello </body></html> 用Servlet 輸出流打印…

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

可以參考一波&#xff1a;https://stackoverflow.com/questions/16573332/jsondecodeerror-expecting-value-line-1-column-1-char-0 1、json格式不對引起的錯誤 加上if json_rep.content:判空操作 json_rep requests.post(url monitor_url, headers monitor_header,json …

WINDOWS系統Eclipse+NDK+Android + OpenCv

WINDOWS系統EclipseNDKAndroid OpenCv 參考文檔博客 1 NDK環境搭建 http://jingyan.baidu.com/article/5d6edee22d908799eadeec9f.html 2 官方文檔 Android.mk與Application.mk如何編寫&#xff0c;OpenCV庫如何調用 http://docs.opencv.org/trunk/doc/tutorials/introduction…

ural 1910. Titan Ruins: Hidden Entrance(Titan Ruins系列題目)

這是Titan Ruins系列第一道題&#xff0c;以后慢慢更新。 赤裸裸滴閱讀理解題&#xff0c;大意就是找到三個連在一起的數&#xff0c;使其之和最大&#xff0c;輸出的第一個數是這三個數的和&#xff0c;第二個數是中間那個數所在的位置。水題一道&#xff0c;很簡單。 1 #incl…

python OSError: [Errno 24] Too many open files | HTTPConnectionPool(host=‘‘, port=80): Max retries e

對于問題&#xff1a;python OSError: [Errno 24] Too many open files 原因:超出了進程同一時間最多可開啟的文件數. 解決方案P: 使用ulimit -n查看進程同一時間最多可開啟的文件數 mac默認是256&#xff0c;linux是1024 修改 sudo vim /etc/security/limits.conf 這個文件的最…

Android 之視頻監控

Android 視頻監控已經有示例了&#xff0c;如http://www.open-open.com/lib/view/open1346400423609.html完全可以實現簡單的監控功能。但是&#xff0c;如果想要在手機上監控另外一個手機就需要做一些改動了。 其中&#xff0c;手機A實現的功能和上文中的一樣&#xff0c;主要…