牛客练习赛44 A小y的序列 (模拟,细节)
鏈接:https://ac.nowcoder.com/acm/contest/634/A
來源:??途W(wǎng)
小y的序列
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 32768K,其他語言65536K
Special Judge, 64bit IO Format: %lld
題目描述
小y有一塊長度為n的布匹。顏色全部為0。他要給這個布匹染色。他總共有m種染料。小y認為一種染料用多次是不和諧的。所以每種染料會被用剛好一次。也就是說小y要給這塊布匹染m次色。第i次會把L_iL
i
?
到R_iR
i
?
這個區(qū)間染成顏色i。現(xiàn)在給出最終布匹每段的顏色。請你輸出一種染色方案。數(shù)據(jù)保證有解
輸入描述:
輸入共兩行。
第一行兩個個正整數(shù)n,m,表示布匹的長度和染料的數(shù)量
第二行n個用空格隔開的正整數(shù),第i個數(shù)字a_ia
i
?
表示第i個布匹的顏色。
輸出描述:
輸出m行。
第i行包含兩個正整數(shù)L_i,R_iL
i
?
,R
i
?
,表示第i次染色的區(qū)間。
示例1
輸入
復制
3 3
1 2 3
輸出
復制
1 3
2 3
3 3
備注:
1 \leq n ,m\leq 10^51≤n,m≤10
5
0 \leq a_i \leq m0≤a
i
?
≤m
1\le L_i \le R_i\le n1≤L
i
?
≤R
i
?
≤n
思路:
本題細節(jié)過多,需要仔細讀題。
我們用兩個數(shù)組 l[i] ,r[i] 分別代表 顏色i出現(xiàn)的最左位置和最右位置,
如果這個顏色在最終數(shù)組中沒有出現(xiàn),那么一定是被編號比它大的顏色覆蓋掉了,
那么對于沒有出現(xiàn)的顏色,我們就輸出出現(xiàn)過的編號最大的顏色所在的位置即可。
細節(jié)見代碼:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <map> #include <set> #include <vector> #include <iomanip> #define ALL(x) (x).begin(), (x).end() #define sz(a) int(a.size()) #define all(a) a.begin(), a.end() #define rep(i,x,n) for(int i=x;i<n;i++) #define repd(i,x,n) for(int i=x;i<=n;i++) #define pii pair<int,int> #define pll pair<long long ,long long> #define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) #define MS0(X) memset((X), 0, sizeof((X))) #define MSC0(X) memset((X), '\0', sizeof((X))) #define pb push_back #define mp make_pair #define fi first #define se second #define eps 1e-6 #define gg(x) getInt(&x) #define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl using namespace std; typedef long long ll; ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;} ll lcm(ll a, ll b) {return a / gcd(a, b) * b;} ll powmod(ll a, ll b, ll MOD) {ll ans = 1; while (b) {if (b % 2)ans = ans * a % MOD; a = a * a % MOD; b /= 2;} return ans;} inline void getInt(int* p); const int maxn = 1000010; const int inf = 0x3f3f3f3f; /*** TEMPLATE CODE * * STARTS HERE ***/ int l[maxn]; int r[maxn]; int n; int m; int main() {//freopen("D:\\code\\text\\input.txt","r",stdin);//freopen("D:\\code\\text\\output.txt","w",stdout);cin>>n>>m;repd(i,1,m){l[i]=inf;}int x;int ok;repd(i,1,n){cin>>x;l[x]=min(l[x],i);r[x]=max(r[x],i);}for(int i=m;i>=1;i--){if(l[i]!=inf){ok=l[i];break;}}repd(i,1,m){// cout<<i<<endl;if(l[i]==inf){cout<<ok<<" "<<ok<<endl;continue;}// cout<<endl;cout<<l[i]<<" "<<r[i]<<endl;}return 0; }inline void getInt(int* p) {char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}} }轉載于:https://www.cnblogs.com/qieqiemin/p/11348115.html
總結
以上是生活随笔為你收集整理的牛客练习赛44 A小y的序列 (模拟,细节)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#中Excel数据的导入、导出
- 下一篇: Foursquare引爆了什么