題解:二分預處理出來每個點單次傳染到的左右範圍,再用線段樹維護每個點最終的範圍最小值、最大值,利用線段樹不斷擴大範圍並更新。隨機乙個 1~
n的序列利用線段樹更新,這樣速度會變得很快,或其他優化方法均可(這裡採用sin函式排序差不多就無序了= =)。還有就是注意題目是按原來的i輸出,我因為這個被卡了一下午,mdzz。
**:
#include#include#include#include#includeusing namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define inf 0x3f3f3f3f
const int mx=1e5+10;
typedef long long ll;
int n,sum[mx<<2][2],a[mx],ans[mx],b[mx];
using namespace std;
struct sec
sec query(int l,int r,int l,int r,int rt)
int m=(l+r)>>1;
sec num[2]=,};
if(m>=l) num[0]=query(l,r,lson);
if(r>m) num[1]=query(l,r,rson);
return sec( min(num[0].l,num[1].l) , max(num[0].r,num[1].r) );
} void update(int l,int r,int l,int r,int rt,int vl,int vr)
int m=(l+r)>>1;
if(m>=l) update(l,r,lson,vl,vr);
if(r>m) update(l,r,rson,vl,vr);
sum[rt][0]=min(sum[rt<<1][0],sum[rt<<1|1][0]);
sum[rt][1]=max(sum[rt<<1][1],sum[rt<<1|1][1]);
}int main()a[n+1]=-inf;
sort(s+1,s+1+n);
sort(po+1,po+1+n);
for(int i=1;i<=n;i++) a[i]=s[i].l;
for(int i=1;i<=n;i++)
build(1,n,1);
for(int i=1;i<=n;i++) a[i]=i;
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++),};
while(num[0].l!=num[1].l || num[0].r!=num[1].r)
update(t,t,1,n,1,num[id].l,num[id].r);//更新t點感染範圍
ans[po[t].r]=num[id].r-num[id].l+1;//找回原來的位置賦值
}printf("%d",ans[1]);
for(int i=2;i<=n;i++) printf(" %d",ans[i]);
puts("");
} return 0;
}
華東師範大學2020 加密2
加密2 time limit 1000ms memory limit 30000kb total submit 179 accepted 103 description 對乙個整數 32位無符號整數 進行規則如下的加密 1.低16位和高16位互換 2.此時的低16位按位取反 3.此時的高16位與低1...
2017華東師範大學網路賽 C
time limit per test 1.5 seconds time limit all tests 10.0 seconds memory limit 256 megabytes 袋鼠媽媽找不到她的孩子了。她的孩子被怪獸抓走了。袋鼠媽媽現在在地圖的左上角,她的孩子在地圖第 x 行第 y 列的位...
華東師範大學2020機試題解
1.統計卡牌的值 2.求30的倍數 include include include include include using namespace std const int maxn 1000 10 int arr maxn bool compare char x,char y intmain i...