NJUST 1746 Similar Number(南京邀請賽 J題)
轉載請註明出處,謝謝http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove
沒想法J題竟然這麼水。。。。。
強制線上之後以為是一個神奇的資料結構題。。。
不過自己肯定是想不到。。。。感謝戴神的指導。。。
首先預處理出對於每一個數,右邊最靠近的相似的數,用r[i]表示
將降序排列後,map搞定。。。
接下來戴神給了神奇的做法,大概是求出 >=1的區間數 減去 >=2的區間數
然後我還是不會。。。。
對於每一個點,求出右邊最近的包括一個相似對的位置,one[i]
表示的是[i,one[i]] …… [i,n] 所有的區間都至少有一個相似對。
而且[i,one[i]-1]不包括相似對。。。。
然後同理處理出two[i],表示區間內至少有兩個相似對。。。
對於one[i]=min(one[i-1],r[i]) 表示i當前這個位置形成一對,或者i-1之後形成一對。
對於two[i]=min(two[i-1], r[r[i]], max(r[i],one[i-1])) 表示i-1之後形成了兩對,i當前這個位置形成兩對,或者i-1之後形成一對,當前位置形成一對。。。。。
明顯one,two具有非遞增性質。。。
至於查詢,暴力情況
for(int i=l;i<=r;i++) if(one[i]<=r) sum+=r-one[i]+1;
for(int i=l;i<=r;i++) if(two[i]<=r) sum-=r-two[i]+1;
由於非遞增,那麼就能二分,然後搞一下區間和。。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <string>
#define LL long long
using namespace std;
const int N = 100005;
int n,m,a[N],r[N];
int one[N],two[N];
LL sum_one[N],sum_two[N];
char str[10];
map<string,int>mymap;
bool cmp(char a,char b){
return a>b;
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
mymap.clear();
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=n;i>=1;i--){
string s="";
int t=a[i];
while(t){
s+=(char)(t%10+'0');
t/=10;
}
sort(s.begin(),s.end(),cmp);
if(mymap.find(s)==mymap.end())
r[i]=n+1;
else r[i]=mymap[s];
mymap[s]=i;
}
r[n+1]=n+1;
one[n+1]=two[n+1]=n+1;
for(int i=n;i>=1;i--){
one[i]=min(one[i+1],r[i]);
two[i]=min(two[i+1],r[r[i]]);
two[i]=min(two[i],max(r[i],one[i+1]));
}
for(int i=1;i<=n;i++){
sum_one[i]=sum_one[i-1]+one[i];
sum_two[i]=sum_two[i-1]+two[i];
}
LL ans=0;
while(m--){
LL l,r;int pos;
scanf("%lld%lld",&l,&r);
l+=ans;r-=ans;
pos=upper_bound(one+l,one+r,r)-one-1;
ans=(pos-l+1)*r-(sum_one[pos]-sum_one[l-1])+(pos-l+1);
pos=upper_bound(two+l,two+r,r)-two-1;
ans-=(pos-l+1)*r-(sum_two[pos]-sum_two[l-1])+(pos-l+1);
printf("%lld\n",ans);
}
}
return 0;
}
相關文章
- HDU4592 Boring Game (2013 ACM-ICPC南京賽區全國邀請賽) 高斯消元GAMACM
- 第三屆華中地區邀請賽網路賽題解
- 2018天梯賽、藍橋杯、(CCPC省賽、邀請賽、ICPC邀請賽)校內選拔賽反思總結!
- 2024ICPC 武漢邀請賽題解 更新至 8 題
- 2013長沙網路賽H題Hypersphere (蛋疼的題目 神似邀請賽A題)
- 2024ICPC武漢邀請賽E. Boomerang 題解OOM
- 2024ccpc濟南邀請賽
- [比賽總結]青島理工大學邀請賽比賽總結
- 2024CCPC山東邀請賽 IAFCK
- 2024 CCPC 鄭州邀請賽遊記
- ICPC2024 昆明邀請賽 遊記
- 『類自然數教室:1~8』(A similar Natural number classroom:1~8)MILAOOM
- 《戰爭藝術大師賽》主播邀請賽賽程過半 晉級門票花落誰家?
- 2024“圖森未來杯”程式設計邀請賽程式設計
- 為加快南京AI產業發展,2018全球(南京)人工智慧應用大賽現公開徵集賽題原型AI產業人工智慧原型
- 《戰爭藝術》大師賽主播邀請賽B組鏖戰 八位主播貢獻精彩賽事
- ACM-ICPC 2018 南京賽區網路預賽__J. Sum【尤拉篩法+質因子分解+思維】ACM
- HDU 4496D-City2013通化邀請賽D題(並查集 需要壓縮路徑)並查集
- 邀請你參與位元組跳動 UME 外掛開發競賽
- BZOJ1299: [LLH邀請賽]巧克力棒(Nim遊戲)遊戲
- App視訊邀請功能APP
- APP推廣-邀請碼APP
- 《戰爭藝術》大師賽主播邀請賽C組D組回顧 十六名主播上演巔峰對決
- 【構造共軛函式+矩陣快速冪】HDU 4565 So Easy! (2013 長沙賽區邀請賽)函式矩陣
- 希望這一切不是無疾而終——2024CCPC濟南邀請賽賽後隨筆
- 邀請函類製作工具,線上雲設計邀請函活動和連結!
- 唯一邀請碼生成策略
- 軟體工程系組織學生到煙臺大學參加ACM邀請賽軟體工程ACM
- Android基於XMPP Smack openfire 開發的聊天室(五) 【邀請、被邀請】AndroidMac
- 2023年CSP-J組複賽真題!
- 關於j_security_check的問題 高手請指教
- 阿里雲盤邀請碼最新分享(阿里雲盤邀請碼怎麼獲取)阿里
- 《戰爭藝術》大師賽主播邀請賽首日戰罷 三大平臺主播盡顯十八般武藝
- 綠盟科技全力護航2020電力行業網路安全攻防邀請賽行業
- Cloud Studio 邀您互動,好禮送不停 | CIF 活動邀請Cloud
- 請教:在J2ME裡state模式的問題模式
- 邀請了阿里的學長學姐分享阿里
- 邀請 | Flink Batch 社群開發者會議BAT