#include
using namespace std;
typedef long long LL;
typedef pair<int ,int > PII;
const int N=1e5+10;
int n,d,k;
PII a[N];
//queue q[N];
int ct[N];
bool sta[N];
int main() {
cin>>n>>d>>k;
for(int i=0;i<n;i++){
scanf("%d%d",&a[i].first,&a[i].second);
}
sort(a,a+n);
for(int i=0,j=0;j<n;j++){
ct[a[j].second]++;
while(a[j].first>=d+a[i].first){
ct[a[i].second]--;
i++;
}
if(ct[a[j].second]>=k) sta[a[j].second]=1;
}
for(int i=1;i<=100000;i++){
if(sta[i]) printf("%d\n",i);
}
return 0;
}
题解:bfs
#include
using namespace std;
typedef long long LL;
typedef pair<int ,int > PII;
const int N=1e5+10;
int T,r,c;
char a[210][210];
typedef struct Node{
int x,y;
int bc;
}node;
int fx[4]={0,0,1,-1},fy[4]={1,-1,0,0};
int main() {
scanf("%d",&T);
while(T--){
scanf("%d%d",&r,&c);
getchar();
node st;
bool sta[210][210];
memset(sta,0,sizeof sta);
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
scanf("%c",&a[i][j]);
if(a[i][j]=='S'){
st.x=i,st.y=j;
st.bc=0;
sta[i][j]=1;
}
}
getchar();
}
//for(int i=1;i<=r;i++){
// for(int j=1;j<=c;j++){
// printf("%c",a[i][j]);
// }
// cout<
//
queue<node> q;
q.push(st);
bool flag=0;
while(q.size()){
node t=q.front();
q.pop();
if(a[t.x][t.y]=='E'){
flag=1;
printf("%d\n",t.bc);
break;
}
for(int i=0;i<4;i++){
int x=t.x+fx[i];
int y=t.y+fy[i];
if(x<1||x>r||y<1||y>c) continue;
if(a[x][y]!='#'&&!sta[x][y]){
sta[x][y]=1;
node tmp;
tmp.x=x,tmp.y=y,tmp.bc=t.bc+1;
q.push(tmp);
}
}
}
if(!flag){
puts("oop!");
}
}
return 0;
}
#include
using namespace std;
typedef long long LL;
typedef pair<int ,int > PII;
const int N=1e5+10;
char a[25][25];
bool sta[25][25];
int w,h;
int fx[4]={0,0,1,-1},fy[4]={1,-1,0,0};
typedef struct Node{
int x,y;
}node;
int main(){
while(1){
scanf("%d%d",&w,&h);
if(w==0&&h==0) break;
node st;
memset(sta,0,sizeof sta);
int ans=1;
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++){
cin>>a[i][j];
if(a[i][j]=='@'){
st.x=i;
st.y=j;
sta[i][j]=1;
}
}
getchar();
}
queue<node> q;
q.push(st);
while(q.size()){
node t=q.front();
q.pop();
for(int i=0;i<4;i++){
int x=t.x+fx[i];
int y=t.y+fy[i];
if(x<1||x>h||y<1||y>w) continue;
if(a[x][y]=='.'&&!sta[x][y]){
sta[x][y]=1;
ans++;
node tmp;
tmp.x=x,tmp.y=y;
q.push(tmp);
}
}
}
printf("%d\n",ans);
}
return 0;
}
#include
using namespace std;
typedef long long LL;
typedef pair<int ,int > PII;
const int N=1e5+10;
int n;
int a[10100];
bool sta[10100];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
int cnt=0;
for(int i=1;i<=n;i++){
if(!sta[i]){
cnt++;
for(int j=i;!sta[j];j=a[j]){
sta[j]=1;
}
}
}
cout<<n-cnt;
return 0;
}
#include
using namespace std;
typedef long long LL;
typedef pair<int ,int > PII;
const int N=1e5+10;
LL INF=-1e10-10;
int n;
int a[N];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
int k=1;
LL sum=INF;
int idx=1;
int t=0;
while(k<=n){
LL tmp=0;
t++;
while(k<(1<<t)&&k<=n){
tmp+=a[k];
k++;
}
if(sum<tmp){
sum=tmp;
idx=t;
}
}
cout<<idx;
return 0;
}
#include
using namespace std;
typedef long long LL;
typedef pair<int ,int > PII;
const int N=1e5+10;
int fx[6]={0,0,0,0,1,-1};
int fy[6]={0,0,1,-1,0,0};
int fz[6]={1,-1,0,0,0,0};
char a[110][110][110];
typedef struct Node{
int x,y,z;
int bc;
}node;
int main(){
int l,r,c;
while(cin>>l>>r>>c){
if(l==0&&r==0&&c==0){
break;
}
node st;
bool sta[110][110][110];
memset(sta,0,sizeof sta);
for(int i=1;i<=l;i++){
for(int j=1;j<=r;j++){
for(int k=1;k<=c;k++){
cin>>a[i][j][k];
if(a[i][j][k]=='S'){
st.x=j,st.y=k,st.z=i;
st.bc=0;
sta[i][j][k]=1;
}
}
}
}
queue<node> q;
q.push(st);
bool flag=0;
while(q.size()){
node t=q.front();
q.pop();
if(a[t.z][t.x][t.y]=='E'){
flag=1;
printf("Escaped in %d minute(s).\n",t.bc);
break;
}
for(int i=0;i<6;i++){
int x=t.x+fx[i],y=t.y+fy[i],z=t.z+fz[i];
if(x<1||x>r||z<1||z>l||y<1||y>c) continue;
if(a[z][x][y]!='#'&&!sta[z][x][y]){
sta[z][x][y]=1;
node tmp;
tmp.x=x,tmp.y=y,tmp.z=z,tmp.bc=t.bc+1;
q.push(tmp);
}
}
}
if(!flag){
puts("Trapped!");
}
}
return 0;
}
#include
using namespace std;
typedef long long LL;
typedef pair<int ,int > PII;
const int N=1e5+10;
char a[1010][1010];
int n;
int fx[4]={0,0,-1,1},fy[4]={1,-1,0,0};
bool sta[1010][1010];
bool flag=0;
void dfs(int x,int y){
sta[x][y]=1;
int sum=0;
for(int i=0;i<4;i++){
int xx=x+fx[i];
int yy=y+fy[i];
if(xx<1||xx>n||yy<1||yy>n) continue;
if(a[xx][yy]=='#'){
sum++;
if(!sta[xx][yy])
dfs(xx,yy);
}
}
if(sum==4) flag=1;
}
int main(){
cin>>n;
getchar();
for(int i=1;i<=n;i++){
scanf("%s",a[i]+1);
}
//for(int i=1;i<=n;i++){
// printf("%s\n",a[i]+1);
//}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]=='#'&&!sta[i][j]){
flag=0;
dfs(i,j);
if(!flag) ans++;
}
}
}
cout<<ans;
return 0;
}
#include
using namespace std;
typedef long long LL;
typedef pair<int ,int > PII;
const int N=1e5+10;
int n;
vector<PII> g[N];
int maxd=0,maxu=0;
void dfs(int u,int fa,int bc){
for(int i=0;i<g[u].size();i++){
if(g[u][i].first== fa) continue;
if(maxd<bc+g[u][i].second){
maxd=bc+g[u][i].second;
maxu=g[u][i].first;
}
dfs(g[u][i].first,u,bc+g[u][i].second);
}
}
int main(){
int x,y,z;
scanf("%d",&n);
for(int i=0;i<n-1;i++){
scanf("%d%d%d",&x,&y,&z);
g[x].push_back({y,z});
g[y].push_back({x,z});
}
dfs(1,-1,0);
dfs(maxu,-1,0);
printf("%lld",1ll*maxd*10+(1ll*1+maxd)*maxd/2);
return 0;
}
#include
using namespace std;
typedef long long LL;
typedef pair<int ,int > PII;
const int N=1e5+10;
int head=-1,e[N],ne[N];
int idx=1;
void add(int k,int x){
if(k==0){
e[idx]=x;
ne[idx]=head;
head=idx++;
}else{
e[idx]=x;
ne[idx]=ne[k];
ne[k]=idx++;
}
}
void del(int k){
if(k==0) head=ne[head];
else if(ne[k]!=-1){
ne[k]=ne[ne[k]];
}
}
int main(){
int m;
cin>>m;
char op;
int x,k;
while(m--){
cin>>op;
if(op=='H'){
scanf("%d",&x);
add(0,x);
}else if(op=='D'){
scanf("%d",&k);
del(k);
}else{
scanf("%d%d",&k,&x);
add(k,x);
}
}
for(int i=head;~i;i=ne[i]){
printf("%d ",e[i]);
}
return 0;
}