NC19422. 数列操作
描述
输入描述
第一行,输入一个整数n,表示接下来需要输入n行
接下来n行,输入 一个整数num和一个整数x
输出描述
当num为3,4,5,6时,输出对应的答案
示例1
输入:
8 1 10 1 20 1 30 3 20 4 2 2 10 5 25 6 -1
输出:
2 20 20 20
说明:
大家自己手玩样例算了QWQC++14(g++5.4) 解法, 执行用时: 160ms, 内存消耗: 1892K, 提交时间: 2018-11-07 20:37:42
#include<bits/stdc++.h> using namespace std; vector<int>s; int main() { int n; while(scanf("%d",&n)!=EOF) { int m,x; while(n--) { scanf("%d%d",&m,&x); if(m==1) s.insert(lower_bound(s.begin(),s.end(),x),x); else if(m==2) s.erase(lower_bound(s.begin(),s.end(),x)); else if(m==3) printf("%d\n",lower_bound(s.begin(),s.end(),x)-s.begin()+1); else if(m==4) printf("%d\n",s[x-1]); else if(m==5) printf("%d\n",*(lower_bound(s.begin(),s.end(),x)-1)); else if(m==6) printf("%d\n",*upper_bound(s.begin(),s.end(),x)); } } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 166ms, 内存消耗: 1888K, 提交时间: 2018-12-07 17:27:56
#include<bits/stdc++.h> #define z a.begin(),a.end(),x #define u upper_bound #define l lower_bound #define p printf("%d\n" using namespace std; vector<int> a;int n,o,x; int main(){ cin>>n; while(n--){ scanf("%d%d",&o,&x); if(o==1) a.insert(u(z),x); if(o==2) a.erase(l(z)); if(o==3) p,l(z)-a.begin()+1); if(o==4) p,a[x-1]); if(o==5) p,*--l(z)); if(o==6) p,*u(z)); } }