update
This commit is contained in:
		
							parent
							
								
									11660860e7
								
							
						
					
					
						commit
						ac313d36a3
					
				
							
								
								
									
										81
									
								
								src/P1972/P1972.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								src/P1972/P1972.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,81 @@
 | 
				
			|||||||
 | 
					#include <algorithm>
 | 
				
			||||||
 | 
					#include <cstdint>
 | 
				
			||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					#include <istream>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using ll = int64_t;
 | 
				
			||||||
 | 
					using std::cin, std::cout;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const ll maxn = 1e6+5;
 | 
				
			||||||
 | 
					ll n, kds[maxn], m, anss[maxn], viss[maxn], bits[maxn];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct Sch{
 | 
				
			||||||
 | 
					    ll l, r, pos;
 | 
				
			||||||
 | 
					}schs[maxn];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ll lb(const ll &v){
 | 
				
			||||||
 | 
					    return v&(-v);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void tadd(ll idx, const ll &v){
 | 
				
			||||||
 | 
					    while(idx<=n){
 | 
				
			||||||
 | 
					        bits[idx]+=v;
 | 
				
			||||||
 | 
					        idx+=lb(idx);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ll tpsch(ll idx){
 | 
				
			||||||
 | 
					    ll res{};
 | 
				
			||||||
 | 
					    while(idx!=0){
 | 
				
			||||||
 | 
					        res+=bits[idx];
 | 
				
			||||||
 | 
					        idx-=lb(idx);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return res;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DB(v){cout<<#v<<": "<<(v)<<'\n';};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(){
 | 
				
			||||||
 | 
					    std::iostream::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cin>>n;
 | 
				
			||||||
 | 
					    for(ll i{1};i<=n;i++){
 | 
				
			||||||
 | 
					        cin>>kds[i];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    cin>>m;
 | 
				
			||||||
 | 
					    for(ll i{1};i<=m;i++){
 | 
				
			||||||
 | 
					        cin>>schs[i].l>>schs[i].r;
 | 
				
			||||||
 | 
					        schs[i].pos=i;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    std::sort(schs+1, schs+1+m, [](const Sch &a, const Sch &b)->bool{
 | 
				
			||||||
 | 
					        return a.r<b.r;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    ll nm{1};
 | 
				
			||||||
 | 
					    for(ll i{1};i<=n;i++){
 | 
				
			||||||
 | 
					        if((bool)viss[kds[i]]){
 | 
				
			||||||
 | 
					            tadd(viss[kds[i]], -1);
 | 
				
			||||||
 | 
					            viss[kds[i]]=i;
 | 
				
			||||||
 | 
					            tadd(i, 1);
 | 
				
			||||||
 | 
					        }else{
 | 
				
			||||||
 | 
					            viss[kds[i]]=i;
 | 
				
			||||||
 | 
					            tadd(i, 1);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(i==schs[nm].r){
 | 
				
			||||||
 | 
					            // cout<<"{ ";
 | 
				
			||||||
 | 
					            // for(ll i{1}; i<=schs[nm].r; i++){
 | 
				
			||||||
 | 
					            //     cout<<tpsch(i)-tpsch(i-1)<<", ";
 | 
				
			||||||
 | 
					            // }
 | 
				
			||||||
 | 
					            // cout<<"}\n";
 | 
				
			||||||
 | 
					            // DB(schs[nm].pos)
 | 
				
			||||||
 | 
					            // DB(tpsch(schs[nm].l-1));
 | 
				
			||||||
 | 
					            // DB(tpsch(schs[nm].r))
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            anss[schs[nm].pos] = tpsch(schs[nm].r) - tpsch(schs[nm].l-1);
 | 
				
			||||||
 | 
					            if(nm==m)break;
 | 
				
			||||||
 | 
					            nm++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    for(ll i{1};i<=m;i++){
 | 
				
			||||||
 | 
					        cout<<anss[i]<<'\n';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										3003
									
								
								src/P1972/P1972_1.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3003
									
								
								src/P1972/P1972_1.in
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										3000
									
								
								src/P1972/P1972_1.out
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3000
									
								
								src/P1972/P1972_1.out
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user