1 solutions
-
0
思路
怎么做?
暴力。对于每个操作2,假设 初始在数组的末尾,遍历数组内其他元素,如果有比 大的,就将 向前移动一格。(注意:对于 前面的元素,须大于 才要移动;对于 后面的元素,大于等于 就要移动。)
怎么
卡常优化?因本站评测机性能
太差太好了,我们不得不运用局部变量加Ofast的卡常优化套餐(开了Ofast就可以不开局部变量)。本站代码
#include<bits/stdc++.h> #pragma GCC optimize("Ofast") //被CCF禁用的神秘小代码,可以让程序变得很快(洛谷上不用开也能过) using namespace std; int n,q,u,v,x,cnt,a[8801]; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>q; for(int i=1;i<=n;++i){ cin>>a[i]; } for(int i=1;i<=q;++i){ cin>>u>>x; if(u==1){ cin>>v; a[x]=v; } else{ cnt=n; for(int j=1;j<x;++j){ if(a[j]>a[x]){ --cnt; } } for(int j=x+1;j<=n;++j){ if(a[x]<=a[j]){ --cnt; } } cout<<cnt<<'\n'; } } return 0; }本站提交记录(有Ofast,无局部变量)
洛谷代码
#include<bits/stdc++.h> using namespace std; int n,q,u,v,x,a[8801]; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>q; for(int i=1;i<=n;++i){ cin>>a[i]; } for(int i=1;i<=q;++i){ cin>>u>>x; if(u==1){ cin>>v; a[x]=v; } else{ int cnt=n; for(int j=1;j<x;++j){ if(a[j]>a[x]){ --cnt; } } for(int j=x+1;j<=n;++j){ if(a[x]<=a[j]){ --cnt; } } cout<<cnt<<'\n'; } } return 0; }洛谷提交记录(有局部变量,无Ofast)
Information
- ID
- 38
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 10
- Tags
- # Submissions
- 10
- Accepted
- 1
- Uploaded By