題目背景
洛谷 mnoip 模擬賽 day1
洛谷3939
題目描述
小 c 的兔子不是雪白的,而是五彩繽紛的。每只兔子都有一種顏色,不同的兔子可能有 相同的顏色。小 c 把她標號從 1 到 nn 的 nn 只兔子排成長長的一排,來給他們喂胡蘿蔔吃。 排列完成後,第 ii 只兔子的顏色是ai
。俗話說得好,「蘿蔔青菜,各有所愛」。小 c 發現,不同顏色的兔子可能有對胡蘿蔔的 不同偏好。比如,銀色的兔子最喜歡吃金色的胡蘿蔔,金色的兔子更喜歡吃胡蘿蔔葉子,而 綠色的兔子卻喜歡吃酸一點的胡蘿蔔……為了滿足兔子們的要求,小 c 十分苦惱。所以,為 了使得胡蘿蔔喂得更加準確,小 c 想知道在區間 [lj
,rj ]裡有多少只顏色為cj
的兔子。
不過,因為小 c 的兔子們都十分地活躍,它們不是很願意待在乙個固定的位置;與此同 時,小 c 也在根據她知道的資訊來給兔子們調整位置。所以,有時編號為xj
和xj+
1 的兩 只兔子會交換位置。 小 c 被這一系列麻煩事給難住了。你能幫幫她嗎?
輸入格式
從標準輸入中讀入資料。 輸入第 1 行兩個正整數
n ,m。
輸入第 2 行
n 個正整數,第
i個數表示第i只兔子的顏色ai
。輸入接下來 mm 行,每行為以下兩種中的一種:
輸出格式
輸出到標準輸出中。
對於每個 1 操作,輸出一行乙個正整數,表示你對於這個詢問的答案。
樣例資料
輸入
6 5輸出1 2 3 2 3 3
1 1 3 2
1 4 6 3
2 3
1 1 3 2
1 4 6 3
1備註【樣例 1 說明】2 2
3
前兩個 1 操作和後兩個 1 操作對應相同;在第三次的 2 操作後,3 號兔子和 4 號兔子
交換了位置,序列變為 1 2 2 3 3 3。
【資料範圍與約定】
子任務會給出部分測試資料的特點。如果你在解決題目中遇到了困難,可以嘗試只解 決一部分測試資料。 對於所有測試點,有 1<=lj
<=
n ,1<=xj
<
n 。每個測試點的資料規模及特點如下表:
特殊性質 1:保證對於所有操作 1,有 |rj
-lj |≤20或 |rj
-lj |>=n-20。
特殊性質 2:保證不會有兩隻相同顏色的兔子。
分析:這道題最大的問題就是空間,我們想要存下每種顏色在原序列中在哪些位置,顯然二維陣列是絕對mle的,所以想到用vector動態開記憶體,需要再加,優化掉了二維陣列裡無用的記憶體,相當於只用了maxn個儲存位置。對於交換就在vector裡二分找到原位置更新成現在的位置(注意判斷互換的顏色是否相同,相同的就不換,不然互換之後就陣列不滿足位置的單調性了,我會說我忘了判斷嗎)。對於查尋也就是二分找到左邊界和右邊界,用陣列編號相減即可得到答案。
**
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
int getint()
for(;isdigit(ch);ch=getchar())
sum=(sum<<3)+(sum<<1)+ch-48;
return sum*f;
}const
int maxn=300010;
int n,m,ord;
int a[maxn];
vector
c[maxn];
int erfen1(int x,int colr)
return ans;
}int erfen2(int x,int colr)
return ans;
}void erfen(int x,int colr,int bz)
}if(bz==1)
c[colr][ans]=x+1;
else
c[colr][ans]=x-1;
}int main()
while(m--)
if(ord==2)
}return
0;}本題結。
NOIP2017 洛谷 逛公園
初見安 這個本狸咕了4個月的題終於寫出來了qaq!這裡是傳送門 洛谷p3953 逛公園 策策每天都會去逛公園,他總是從1號點進去,從nn號點出來。策策喜歡新鮮的事物,它不希望有兩天逛公園的路線完全一樣,同時策策還是乙個 特別熱愛學習的好孩子,它不希望每天在逛公園這件事上花費太多的時間。如果1號點 到...
NOIP2017模擬 鴨舌
題目 小美喜歡吃鴨舌。有乙個 n 個點的樹,每個節點 i 第 i 個點上有 ai 個鴨舌。小美一開始處於 x 號點。每次小美可以選擇乙個與現在的點有邊的點而且那個點還有鴨舌,那麼小美會走到那個點並吃乙個鴨舌。要保證小美最後還是走到 x 號點。問小美最多能吃幾個鴨舌?輸入格式 輸入第一行乙個整數 n ...
NOIP2017模擬 區間
2017.11.3 t1 2032 樣例資料 輸入3 2 1 2 1 1 2 4 5輸出 2 6分析 這道題為什麼要放在t1 考得我懷疑人生。本來也只會暴力找,對於30 的資料我是這樣的 先離散化,再二維陣列記錄所有顏色的在每個位置的字首和,然後四層迴圈暴力查詢。而正解是 先離散化,再把每種顏色的每...