題解 編碼問題 NOIP1995普及 提高

2022-06-04 03:00:13 字數 916 閱讀 3345

為上個世紀的題寫個題解吧。。。

題面因為本人開始做題習慣從1開始標號,所以在\(t = 2\)的情況下的數字大小其實是離散化後的大小,要得到\(a[i]\)直接--就好了。

當\(t = 1\)時很好做,直接用樹狀陣列求乙個順序對即可。

對於求順序對其實可以直接反著打逆序對。

即是在迴圈\(a[i]\)時,先輸出\(query(a[i])\),再在\(a[i]\)的後面\(update(a[i], 1)\)就好了。

這個就有點難想了。

已知這個數的大小應該是在他前面且比他小的數與在他後面比他小的數的和。可是樹狀陣列只能維護字首和。

那麼現在就可以從後往前迴圈。

對於最後一位,它的大小肯定就是給出的\(b[i] + 1\),那麼倒數第二位數可以分類討論:

#include #include #include using namespace std;

const int maxn = 1e6 + 5;

int t, n, a[maxn], b[maxn];

int bit[maxn], add;

int lowbit(int x)

void update(int x, int k)

int query(int x)

int main()

for (int i = 1; i <= n; i++)

} else

for (int i = n; i >= 1; i--) else r = mid;

}a[i] = r;

update(r, -1);

} for (int i = 1; i <= n; i++)

} return 0;

}

NOIP1995木塊問題

描述 設有乙個四層的積木塊,1 4層積木塊的數量依次為 5,6,7,8 如下圖所示放置 其中,給出第三層與第四層所標示的數字,並已知第三層的資料是由第四層的資料計算出來的。計算的方法是 第三層的某個資料a是由第四層相鄰的兩個資料b,c經過某種計算後產生的 ab c 計算所用到的計算符為 且無優先順序...

mysql編碼問題解決

首先需要在建立表的時候,將編碼規定。具體如下 create databasetest character set utf8 collate utf8 general ci engine innodb default charset utf8 補救措施 1.檢視預設編碼集 show variables...

題解 刪數問題 Noip1994

時間限制 1000 ms 記憶體限制 65536 kb 提交數 11506 通過數 3852 輸入乙個高精度的正整數n,去掉其中任意s個數字後剩下的數字按原左右次序組成乙個新的正整數。程式設計對給定的n和s,尋找一種方案使得剩下的數字組成的新數最小。輸出新的正整數。n不超過240位 輸入資料均不需判...