随笔 - 531  文章 - 0  评论 - 3  阅读 - 10215 

有n个影碟,标号为1~n,位置为0~n-1,每次取出一个影碟看完后,将其放在最前面(标号为0处),问每个影碟取出前,其位置之前有多少个影碟

 

开2倍数组, "i放置前面" 这个操作

add(i,-1) ,add(newi,1)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1e5;
 int n ,p[N*2+5] ;
 vector<int> ans;
 int c[N*2+5];
  
 int lowbit(int x){
    return x&-x;
 }
 int qsum(int x){
    int t=0;
    for(;x;x-=lowbit(x)) t+=c[x];
    return t;
 }
 void add_(int x,int v){
    for(;x<=N*2;x+=lowbit(x)) c[x]+=v;
 }
 void sov(){
    ans.clear();memset(c,0,sizeof c); memset(p,0,sizeof p);
    int tes;cin>>n>>tes;
    for(int i=1;i<=n;i++) p[i]=N+i,add_(p[i],1);
    int pos=N;
     
    while(tes--){
        int x;cin>>x;
        ans.push_back(qsum(p[x]));
         
        add_(p[x],-1);
        p[x]=pos--;
        add_(p[x],1);
    }
    for(int i=0;i<ans.size();i++){
        if(i>0) cout<<' ';cout<<ans[i]-1;
    }
    cout<<endl;
 }
 signed main () {
    int tes; cin>>tes;
    while (tes--)
        sov();
}

 

posted on   towboat  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示