题目
A
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct node{
int x,y;
bool operator <(const node& a)const {
return x < a.x;
}
};
node a[10000];
int main(){
int t;
cin >> t;
memset(a,0,sizeof(a));
for(int i = 0;i < n;i++){
scanf("%d%d",&a[i].x,&a[i].y);
}
sort(a,a+n);
node c;
c.x = 0;
int lf = lower_bound(a,a+n,c)-a;
int ans = 0;
if(lf < n/2){
for(int i = 0;i < 2*lf+1;i++){
ans += a[i].y;
}
}
else{
lf = n-lf;
for(int i = n-1,j = 0;i >= 0 && j < 2*lf+1;i--,j++){
ans += a[i].y;
}
}
cout << ans << endl;
return 0;
}
B
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstring>
#include <stack>
#include <set>
#include <map>
#include <vector>
using namespace std;
#define INF 0x4fffffff
#define LL long long
#define MAX(a,b) ((a)>(b))?(a):(b)
#define MIN(a,b) ((a)<(b))?(a):(b)
int a[1000005];
int l[1000005];
int r[1000005];
int d[1000005];
int main(){
int n;
cin >> n;
map<int,int> ma;
int cnt = 1;
for(int i = 1;i <= n;i++){
scanf("%d",&a[i]);
if(ma[a[i]] ==0){
ma[a[i]] = cnt++;
l[ma[a[i]]] = i;
}
d[ma[a[i]]]++;
r[ma[a[i]]] = i;
}
int qu = 0;
int ans = 0;
for(int i = 0;i < cnt;i++){
if(d[i] > qu){
qu = d[i];
ans = i;
}
else if(d[i] == qu){
if(r[i]-l[i]+1 < r[ans]-l[ans]+1){
ans = i;
}
}
}
cout << l[ans] << " " << r[ans] << endl;
return 0;
}
C
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <map>
#include <queue>
using namespace std;
int d[100005];
int c[100005];
int ma[100005];
int vis[100005];
#define INF 100000000
int main(){
int n;
cin >> n;
for(int i = 1;i <= n;i++){
int x;
scanf("%d",&x);
queue<int> que;
que.push(x);
vis[x] = i;
ma[x] = 0;
c[x] ++;
while(!que.empty()){
int u = que.front();
que.pop();
int a = u >> 1;
int b = u << 1;
if(a >= 1 && a <= 1e5){
if(vis[a] !=i){
ma[a] = ma[u] + 1;
d[a] += ma[a];
c[a] ++;
vis[a] = i;
que.push(a);
}
}
if(b >= 1 && b <= 1e5){
if(vis[b] != i){
ma[b] = ma[u] + 1;
d[b] += ma[b];
vis[b] = i;
c[b] ++;
que.push(b);
}
}
}
}
int mi = INF;
for(int i = 1;i <= 1e5;i++){
if(c[i] == n && d[i] < mi){
mi = d[i];
}
}
cout << mi << endl;
return 0;
}
好像存在卡map的现象,我开始用map标记读过没读过发现超时了,貌似只有一个log(log1e5*log1e5)的复杂度怎么加